2

假设我有这段代码(小提琴)旨在记忆模块:

var chat = {
 // Create this closure to contain the cached modules
 module: function() {
    // Internal module cache.
    var modules = {};
     console.log('in module:', name);  // <---------- "in return: result"     
    // Create a new module reference scaffold or load an
    // existing module.
    return function(name) {
      console.log('in return:', name); // <---------- "in return: derp"
      // If this module has already been created, return it.
      if (modules[name]) {
        return modules[name];
      }

      // Create a module and save it under this name
      return modules[name] = { Views: {} };
    };
  }()
};

chat.module("derp");

代码中没有任何地方提到“结果”这个短语。为什么它会在第一个控制台日志中返回该值?

name另外,当声明中没有指定参数时,返回函数如何获取参数的值module: function() {}

4

3 回答 3

2
console.log('in module:', name);

name您在声明它之前正在记录。所以它正在使用window.name

于 2012-08-28T19:01:56.280 回答
2
… = function() {
    // …
    console.log('in module:', name);  // <---------- "in return: result"     
    return function(name) {…};
}();

你看,在那个立即执行的匿名函数表达式的范围内,没有变量“ name”。因此,将使用全局变量window.name-它的值似乎"result"在您的情况下(jsfiddle 目标 iframe 的名称)-尝试打开的页面,它将记录一个空字符串。

于 2012-08-28T19:04:26.597 回答
0

仅供参考......在这个例子中的“结果”是JsFiddle中右下角窗口(div / iframe)的名称(或者更好地说是ID)......

正如@Rocket & @Bergi已经说过的那样......你得到了“window.name”

于 2012-08-28T19:09:57.890 回答