在自执行函数中访问阴影变量

时间:2012-12-07 10:29:55

标签: javascript function scope self-executing-function

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

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

(function($){

   var someValue = 41;

   function someFunction(someValue) {

      console.log(someValue); //= 22

   }

   someFunction(22);


}(jQuery));

3 个答案:

答案 0 :(得分:2)

你似乎故意遮蔽变量,然后试图获得它的价值。只需给它一个不同的名称或重命名您的参数。

   var someValue = 41;
   function someFunction(myParameter) {
      console.log(someValue); // someValue == 41
   }
   someFunction(22); // logs 41

答案 1 :(得分: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名称会遮盖在函数外声明的名称。

答案 2 :(得分:0)

因为您正在使用局部变量(var),所以someValue的上下文被设置为该函数。最好的解决方案是使用其他人建议的其他名称,如果您迫切希望使用相同的名称,但可以通过删除 var 关键字将其附加到窗口对象:

(function($) {

    someValue = 41;

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

    someFunction(22);

}(jQuery));