为什么我得到的值“的结果”这个封闭?(Why do I get the value “result”

2019-06-27 11:37发布

比方说,我有这样的代码( 小提琴旨在memoize的模块):

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() {}声明?

Answer 1:

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

您正在登录name之前你曾经声明。 所以它的使用window.name代替。



Answer 2:

… = function() {
    // …
    console.log('in module:', name);  // <---------- "in return: result"     
    return function(name) {…};
}();

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



Answer 3:

只是在这个例子中引用......“ 结果 ”,是的jsfiddle右下方窗口(DIV / IFRAME)的名称(或更好说ID)...

因此,作为@ 火箭 &@ BERGI已经说......你所得到的“window.name”



文章来源: Why do I get the value “result” for this closure?