“闭包”究竟在JavaScript中提到了什么?
我明白什么是封闭,但我在closure
术语所指的术语方面遇到了一些麻烦。 我在许多网站上看到了这个术语,但他们很少就它的实际定义达成一致。
有人能准确地告诉我什么closure
是指?
来自JavaScript闭包
两个一句话总结:
闭包是函数的局部变量 - 在函数返回后保持活动状态,或
闭包是当函数返回时不会释放的栈帧。 (就好像一个'栈框架'被malloc',而不是在堆栈上!)
关于关闭的一篇非常好的文章
Javascript关闭
“闭包”是一个表达式(通常是一个函数),可以将自由变量与一个绑定这些变量的环境(即“关闭”表达式)一起使用。
关于Closure的简单解释是ECMAScript允许内部函数; 函数定义和函数表达式在其他函数的函数体内。 而且这些内部函数允许访问其外部函数中的所有局部变量,参数和声明的内部函数。 当这些内部函数之一在包含它的函数之外被访问时形成闭包,以便它可以在外函数返回之后执行。 在此时它仍然可以访问其外部函数的局部变量,参数和内部函数声明。 那些局部变量,参数和函数声明(最初)具有它们在外部函数返回时可能具有的值,并且可以与内部函数交互。
这是一个很好的例子
JavaScript,时间来关闭闭包
它是一个函数,可以“持有”另一个范围内的引用或引用。 例如:
var myArrayOfFunctions = [];
for(var i = 0; i<3: i++)
{
//Note how the function being defined uses i,
//where i lives in the parent's scope, this creates a closure
myArrayOfFunctions[i] = function(a) { return a + i;}
}
myArrayOfFunctions[0](5); //Prints 8 WTF!
myArrayOfFunctions[1](5); //8 again
myArrayOfFunctions[2](5); //Well, this 8 was expected
发生这种情况是因为当函数被“创建”时,它们不会复制我的值,它们持有对i的引用,所以当我们调用函数时,它们使用i的当前值3。
这是一个图形解释。
对我来说,JS中的关闭允许你做以下事情。
当添加到“b”中时,内部函数仍然可以使用“a”,尽管它在外部声明。
function adder(a){
return function(b){
return a + b;
};
}
var add5 = adder(5);
alert( add5(10) );
对于JS闭包的极端使用,你可以看一下PURE库的源代码(一个JS模板引擎)
链接地址: http://www.djcxy.com/p/51609.html