在显示模块模式中从模块函数显式访问模块var

时间:2013-09-11 21:20:40

标签: javascript revealing-module-pattern

我有范围问题。我有以下代码实现了揭示模块模式:

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的完全限定名是什么?

提前致谢

2 个答案:

答案 0 :(得分:1)

  

我希望函数sayOhai使用定义的var来说“ohai”。假设我不想更改sayOhai的参数名称,如何在sayOhai中访问foo的值?

你根本做不到。 var foo被内部函数参数阴影化,具有相同的名称。

答案 1 :(得分:1)

无法按照您的要求进行操作。

当你在函数中定义var foo = "ohai";然后返回一个闭包时,foo现在是私有的。

在函数sayOhai中,你有一个与词法范围内声明的变量同名的参数。

因此,函数的名为foo的参数总是获胜。