【发布时间】:2014-06-18 08:08:09
【问题描述】:
来自 Mozilla 文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
displayName 不是真正的闭包,因为它关闭了其外部函数 makeFunc 的范围以供以后使用? Mozilla 说 makeFunc 是闭包:
这个谜题的解决方案是 myFunc 变成了一个闭包。闭包是一种特殊的对象,它结合了两件事:一个函数,以及创建该函数的环境。
我记得读过不同的定义..
Mozilla 也对他们所说的以下代码自相矛盾:
function init() {
var name = "Mozilla"; // name is a local variable created by init
function displayName() { // displayName() is the inner function, a closure
alert (name); // displayName() uses variable declared in the parent function
}
displayName();
}
init();
init() 创建一个局部变量名称,然后一个名为 displayName() 的函数 displayName() 是内部函数(闭包)——它在 init() 中定义,并且仅在该函数的主体中可用。
所以总而言之,他们说内部函数和外部函数都变成了一个闭包..
抱歉问题已结束。我将“myFunc”误读为“makeFunc”-_-
【问题讨论】:
标签: javascript scope closures