闭包到底是如何工作的?
文章来源自Stack Overflow网站上,Aaron Hall提问的问题,这里重点讲的是回答中得票数最高的一个人的答案,希望能够帮助大家更好的了解到闭包的作用,当然,有些语法和翻译上会有些错误,可以向我指出。
本人的邮箱:aleenli1992@gmail.com
原问题:
你怎么给一个有一些JS基础的,知道一点闭包概念的包括(函数,变量,诸如此类)的人,去解释JS中的闭包这个概念呢?
我也看过一些维基百科中的例子,但是很不幸,那一点用处也没有。
回答者:flying sheep
闭包并不神奇
这篇文章是使用JS的代码去解释闭包以便程序员去理解他,并不是针对于一些大师和专业的开发者。
一旦你挖掘了核心概念的话,闭包会很容易理解。无论如何,如果你想要通过一些专业的论文,或者是学术性质的文章去理解他的话,我只能说那是不可能的。
这篇文章适合有主流编程语言经验的程序员,那种呢?就是看的懂下面这行代码的那种:
|
|
一个闭包的例子:
两句话总结:
- 闭包是支持一级函数的一种方式,他是一个表达式,可以引用该作用域内的变量(当它被首次声明时),将它分配给一个变量,或者传递成一个函数的参数,或者作为一个函数结果返回。
- 当一个函数开始执行的时候,闭包是一个被分配的栈帧,并且函数的返回值不会被限制。栈帧的意思是指一个函数调用单独分配的那部分栈空间。(就好像一个栈帧被分配在堆中,并不是在栈中).
下面代码返回的是一个函数的引用
|
|
大部分的JS程序员都明白上面的代码里,如何将对函数的应用返回到变量(say2)上。如果你不明白的话,你最好搞懂这个再来学习闭包。如果一个程序员使用C语言的话,他会思考函数的返回值是指向这个函数的,并且变量say和say2都是执行同一个函数。