And*_*ech 71 javascript closures definition
我理解闭包是什么,但我在查找该术语的确切含义时遇到了一些麻烦closure.我已经看过许多网站上使用的术语,但他们很少同意它的实际定义.
有人能告诉我到底是什么意思closure吗?
rah*_*hul 45
两个一句话摘要:
闭包是函数的局部变量 - 在函数返回后保持活动状态,或者
闭包是一个堆栈帧,在函数返回时不会释放.(好像'stack-frame'是malloc'ed而不是堆栈!)
关于闭包的一篇非常好的文章
"闭包"是一个表达式(通常是一个函数),它可以将自由变量与绑定这些变量的环境("关闭"表达式)结合在一起.
关闭的简单解释是ECMAScript允许内部函数; 函数定义和函数表达式,位于其他函数的函数体内.并且允许那些内部函数访问其外部函数中的所有局部变量,参数和声明的内部函数.当其中一个内部函数在包含它的函数之外可访问时形成闭包,从而可以在外部函数返回之后执行闭包.此时它仍然可以访问其外部函数的局部变量,参数和内部函数声明.那些局部变量,参数和函数声明(最初)具有外部函数返回时的值,并且可以通过内部函数进行交互.
这是一个很好的例子
它是一个"持有"引用或引用另一个范围内的东西的函数.例如:
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
Run Code Online (Sandbox Code Playgroud)
这是因为当函数被"创建"时,它们不复制i的值,它们持有对i的引用,所以当我们调用函数时,它们使用i的当前值3.
| 归档时间: |
|
| 查看次数: |
16477 次 |
| 最近记录: |