昨天去腾讯溜了一圈,去深圳总部参加2017届TST专场面试,出了道Javascript闭包的题目,这里稍微写一下。
在Javascript中,函数内部是可以直接读取全局变量的。
|
闭包
“闭包”(closure)的概念起源于离散数学。在Javascript中“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
闭包的特点
- 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
- 一个闭包就是当一个函数返回时没有释放资源的栈区。javascript允许使用内部函数位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明其的内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
|
在上面代码中,str是局部变量,若str在closure函数调用完成以后不能再被访问,则在函数执行完成后str将被释放。但是由于函数closure返回了一个内部函数,且这个返回的函数引用了str变量,导致了str可能会在closure函数执行完成以后还会被引用,所以str所占用的资源不会被回收。这样closure就形成了一个闭包。
JavaScript的闭包非常重要,只有深入理解其意义才能使得程序更加安全:)