闭包的使用场景
一般情况下,不要用闭包,除非你真正需要它。
闭包是什么
什么是闭包?
js高级程序设计给出的定义是:有权访问另一个函数作用域中变量的函数。
怎么创建闭包呢?
function foo(){ var a=0; function bar(){
alert(a); } return bar; } var c=foo(); c();
全局变量c指定对函数foo的内部函数bar的引用;内部函数bar的执行需要依赖函数foo的资源;
这里就产生了一个闭包,使得a在执行完毕后并返回,不会被JavaScript垃圾回收机制GC回收。
因为这里c还在引用这bar,而bar依赖着foo,故foo在使用后,仍然存在于内存中。
应用场景
1、内部函数变量、方法访问外部的变量、函数,延长作用域链
2、即时函数
3、模仿块级作用域,在函数执行完时,函数内部所有的变量都会被立即销毁。
注:实现私有变量,保护命名空间,避免污染全局变量,需要长期驻留内存。
作用域
在后台执行环境中,闭包的作用域链包含着它自己的作用域、包含函数的作用域、和全局作用域。
函数的作用域及其所有变量都会在函数执行结束后被销毁。