We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent f90334b commit cef3cdaCopy full SHA for cef3cda
javascript/note/note2.md
@@ -161,3 +161,30 @@ console.log(encodeURIComponent(uri))
161
162
`Math`对象为另一个内置对象。为JavaScript提供了数学计算功能。
163
164
+##函数闭包
165
+先看一段代码
166
+```javascript
167
+function f(){
168
+ var n = 100;
169
+}
170
+f()
171
+```
172
+变量n定义在f()中,属于作用于f的内部变量,当f()执行结束后变量的生存周期就结束了,所开辟的内存空间也将会被垃圾回收。
173
+再看另一段代码
174
175
+function f1(){
176
177
+ return function f2(){console.log(n);}
178
179
+var result = f1()
180
+console.log(result()) //100
181
182
+我们在函数f1()外面定义了变量resul来接受f1()执行以后的返回值,f1()的返回值是一个匿名函数,该函数调用了f1()内部定义的变量n。
183
+
184
+我们发现虽然f1()执行完成了,但是执行`result()`会输出`100`,说明变量n并没有失效,他可以在f1()作用域外被result函数访问。
185
186
+我们把这种函数中引用函数作用域以外变量的特性叫做--**函数的闭包**
187
188
+函数闭包可以扩大引用变量的生存周期和使用范围,但也有可能造成内存泄露。
189
190
0 commit comments