簡體   English   中英

為什么我得到此關閉的“結果”值?

[英]Why do I get the value “result” for this closure?

假設我有以下代碼( fiddle )用於記憶模塊:

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");

代碼中甚至沒有提到短語“結果”。 為什么會在第一個控制台日志中返回該值?

另外,當在module: function() {}未指定任何name時,返回函數如何獲取name參數的值module: function() {}聲明?

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

在聲明name之前,您正在記錄name 因此,它改用window.name

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

您會看到,在立即執行的匿名函數表達式的范圍內,沒有變量“ name ”。 因此,將使用全局變量window.name在您的情況下,它的值似乎是"result" (jsfiddle目標iframe的名稱)-嘗試展開頁面 ,它將記錄一個空字符串。

僅供參考...在此示例中,“ result ”是JsFiddle中右下方窗口(div / iframe)的名稱(或更准確地說是ID)...

因此,作為@ 火箭 &@ BERGI已經說......你所得到的“window.name”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM