1

我有一个范围问题。我有以下实现显示模块模式的代码:

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

提前致谢

4

2 回答 2

1

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

你根本做不到。varfoo被同名的内部函数参数所遮蔽。

于 2013-09-11T21:29:03.543 回答
1

无法按照您的要求完成。

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

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

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

于 2013-09-11T21:30:35.627 回答