我有范围问题。我有以下代码实现了揭示模块模式:
myModule = function(){
var foo = "ohai";
function sayOhai(foo){
alert(foo);
};
return{
sayOhai : sayOhai
};
}();
myModule.sayOhai("configData");
这导致了对话“configData”。
但是,我希望函数sayOhai使用定义的var来说“ohai”。假设我不想更改sayOhai的参数名称,如何在sayOhai中访问foo的值?我试过了alert (this.foo)
,但这是未定义的。
同样,这是一个理论问题,因此更改sayOhai(foo)
不是我正在寻找的解决方案。 var的名称和方法的参数应该保持不变。那么,从sayOhai的范围来看,var foo的完全限定名是什么?
提前致谢
答案 0 :(得分:1)
我希望函数sayOhai使用定义的var来说“ohai”。假设我不想更改sayOhai的参数名称,如何在sayOhai中访问foo的值?
你根本做不到。 var foo
被内部函数参数阴影化,具有相同的名称。
答案 1 :(得分:1)
无法按照您的要求进行操作。
当你在函数中定义var foo = "ohai";
然后返回一个闭包时,foo现在是私有的。
在函数sayOhai中,你有一个与词法范围内声明的变量同名的参数。
因此,函数的名为foo的参数总是获胜。