假设我有这个代码(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");
代码中没有提到甚至提到的短语“结果”。为什么它会在第一个控制台日志中返回该值?
另外,当name
声明中没有指定时,return函数如何获取module: function() {}
参数的值?
答案 0 :(得分:2)
console.log('in module:', name);
在您声明之前,您正在记录name
。所以它改为使用window.name
。
答案 1 :(得分:2)
… = function() {
// …
console.log('in module:', name); // <---------- "in return: result"
return function(name) {…};
}();
您会看到,在该立即执行的匿名函数表达式的范围内,没有变量“name
”。因此,将使用全局变量window.name
- 在您的情况下它的值似乎是"result"
(jsfiddle目标iframe的名称) - 尝试unwrapped page,它将记录一个空字符串。
答案 2 :(得分:0)
仅供参考......“结果”在此示例中,是JsFiddle中右下方窗口(div / iframe)的名称(或更好说的ID)...
所以@ Rocket &amp; @ Bergi 已经说过......你得到了“window.name”