闭包是不少语言都具有的特性,在js中,闭包主要涉及到js的几个其余的特性:做用域链,垃圾(内存)回收机制,函数嵌套,等等. 程序员
在理解闭包之前.最好能先理解一下做用域链的含义,简单来讲,做用域链就是函数在定义的时候建立的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数中的变量放在其次,把再高一级函数中的变量放在更后面,以此类推直至全局对象为止.当函数中须要查询一个变量的值的时候,js解释器会去做用域链去查找,从最前面的本地变量中先找,若是没有找到对应的变量,则到下一级的链上找,一旦找到了变量,则再也不继续.若是找到最后也没找到须要的变量,则解释器返回undefined. 闭包
var result=[]; function foo(){ var i= 0; for (;i<3;i=i+1){ result[i]=function(){ alert(i) } } }; foo(); result[0](); // 3 result[1](); // 3 result[2](); // 3
闭包能够用在许多地方。它的最大用处有两个,一个是前面提到的能够读取函数内部的变量,另外一个就是让这些变量的值始终保持在内存中。 函数