1

次の例では、someFunction内からsomeFunctionの外部で宣言されたsomeValue変数への参照を取得する方法はありますか、それとも同じ名前関数のパラメーターによって完全に隠されていますか。これを使ってウィンドウにアタッチして関数内からアクセスできるのはありがたいのですが、このような状況でアクセスする方法はありますか?

[編集]明確にするため。パラメータが変数をシャドウイングしていることを理解しています。明らかに、パラメータの名前を変更すると、この問題は解消されます。私の質問は、この状況で変数にアクセスする方法があるかどうかです。

(function($){

   var someValue = 41;

   function someFunction(someValue) {

      console.log(someValue); //= 22

   }

   someFunction(22);


}(jQuery));
4

3 に答える 3

2

意図的に変数をシャドウイングし、その値を取得しようとしているようです。別の名前を付けるか、パラメーターの名前を変更してください。

   var someValue = 41;
   function someFunction(myParameter) {
      console.log(someValue); // someValue == 41
   }
   someFunction(22); // logs 41
于 2012-12-07T10:31:28.823 に答える
0

ローカル変数(var)を使用しているため、someValueのコンテキストが関数に設定されます。最善の解決策は、他の人が提案した別の名前を使用することです。同じ名前を使用したい場合は、次のようにvarキーワードを削除することで、ウィンドウオブジェクトに名前を付けることができます。

(function($) {

    someValue = 41;

    function someFunction(someValue) {
        console.log(window.someValue); //= 41
        console.log(someValue); //= 22
    }

    someFunction(22);

}(jQuery));
于 2012-12-07T10:55:03.757 に答える
0

someValue変数を渡さない限り、関数の外部で宣言されたをログに記録する方法はありません。

(function($){
    var someValue = 41;

    function someFunction(someValue, otherValue) {
        console.log(someValue, otherValue); //= 22 41
    }
    someFunction(22, someValue);
}(jQuery));

または、パラメータの名前を変更します。

(function($){
    var someValue = 41;

    function someFunction(otherValue) {
        console.log(someValue); //= 41
    }
    someFunction(someValue);
}(jQuery));

これは、someValueパラメーターとして使用する名前が、関数の外部で宣言された名前を覆い隠しているためです。

于 2012-12-07T10:36:17.127 に答える