听燕十八老师的《JavaScript高级》课程,对JavaScript中闭包的笔记记录!
function t1(){ var age=20; function t2(){ console.log(age); } return t2; } var tem=t1(); var age=99; tem();//20
在大部分语言中,t1被调用执行则申请内存,并把其局部变量push入栈。t1函数执行完毕,内部的局部变量随着函数的退出而销毁,因此age=20的局部变量已经消失了。但在js中,age=20这个变量却被t2捕捉,即使t1执行完毕,通过t2依然能访问该变量。这种情况---返回的函数,并非孤立的函数,甚至把其周围的变量环境一起打包,形成一个封闭的"环境包",共同返回,所以叫"闭包"!
一句话概括:函数的作用域取决于声明时,而不取决于调用时!