我仍然在努力思考JavaScript中的闭包(为了记录,我已经在Stack Overflow上阅读了JavaScript闭包的答案,加上"用于傻瓜的JavaScript闭包",我仍然对它们感到困惑).
我的主要问题是我无法理解在函数中声明另一个函数的重要性; 我得到返回内部函数允许外部函数的局部变量保持活动,但在这个例子中是不是仍然如此?
function sayName(name) {
var say = "Hello, " + name;
alert(say);
}
var sayJohn = sayName("John");
Run Code Online (Sandbox Code Playgroud)
在我创建的sayJohn()函数中,局部变量"say"仍然在其局部范围之外被引用.那么这还不能创造一个闭包吗?
NB我为这一切听起来有多乱而道歉,对于学习JavaScript和编程一般都很新鲜,所以请放轻松我!
你的例子确实无法表现出封闭的力量.看看这个:
function makeAdder(add1){
return function(add2){
return add1 + add2;
};
}
// add10 is a function which increments the input by 10(that's the closure's magic)
var add10 = makeAdder(10);
add10(12); // returns 22
add10(9); // returns 19
Run Code Online (Sandbox Code Playgroud)