闭包
闭包:
由于作用域链的原因,父对象不能访问子对象的局部变量。
即父对象的所有变量,对子对象是可见的,反之则不成立。
解决方法:把子对象return,这样在父对象就可以访问(由于函数的作用域就是其声明时所在的作用域,与其运行时所在的作用域无关,所以return后的函数的作用域不变)
可以把闭包简单理解成“定义在一个函数内部的函数”
闭包最大的特点,就是它可以“记住”诞生的环境(即声明时所在的作用域链)
在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中
function f1() { var n = 999; function f2() { console.log(n); } return f2; } var result = f1(); result(); // 999
外层函数每次运行,都会生成一个新的闭包,而这个闭包又会保留外层函数的内部变量,所以内存消耗很大。因此不能滥用闭包,否则会造成网页的性能问题