闭包的使用场景

一般情况下,不要用闭包,除非你真正需要它。

闭包是什么

什么是闭包?

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、模仿块级作用域,在函数执行完时,函数内部所有的变量都会被立即销毁。

注:实现私有变量保护命名空间避免污染全局变量需要长期驻留内存。

作用域

在后台执行环境中,闭包的作用域链包含着它自己的作用域、包含函数的作用域、和全局作用域。

函数的作用域及其所有变量都会在函数执行结束后被销毁。

原文地址:https://www.cnblogs.com/WaTa/p/5507713.html