JS闭包
标准的闭包:
function a(){ var i=0; function b(){ alert(++i); } return b; } var c = a(); c(); 这是个标准的闭包.在函数a中定义了函数b,a又return了b的值.这些可以先不管. var c = a(); c(); 这两句执行很重要. 在var c = a();这行里,执行了a函数,那么肯定a经过了return.按照主流语言的函数特性,现在c的值就是a的返回值. 第二行c()的执行实际执行的就是b函数.最后不管执行的是谁,会弹出一个值为0的窗口,到此为止,所有的生命周期按理论来说就算全部结束了. 可是,如果我们再多执行一行. var c = a(); c(); c(); 第一次弹出0,第二次执行却弹出了1. 也就是说,第一次c()后,a中的i依然保留.自然a在内存的栈区依然保留. a是return过了,但是,a及内部值却依然存在,这就是闭包.
好了,总结下,
1,闭包外层是个函数.
2,闭包内部都有函数.
3,闭包会return内部函数.
4,闭包返回的函数内部不能有return.(因为这样就真的结束了)
5,执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在.
给心灵一个纯净空间,让思想,情感,飞扬!