1

在下面的示例中,是否有任何方法可以从someFunction内部获取对在someFunction外部声明的someValue变量的引用,或者它是否完全被函数的同名参数所掩盖。我很感激我可以将它附加到窗口并使用this从函数中访问它,但是在这种情况下有没有办法访问它?

[编辑]澄清。我知道该参数正在隐藏变量。显然,更改参数的名称将消除此问题。我的问题是在这种情况下是否有任何方法可以访问变量。

(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

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 回答
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 回答