闭包的概念:
所谓闭包,即是由函数和与其相关联的引用环境组合而成的实体。
所谓引用环境是指在执行程序中的某个点所有处于活跃状态的约束所组成的集合。其中的约束是指一个变量的名字和其所代表的对象之间的关系。那么为什么要把引用环境和函数结合起来呢?这主要是因为在支持嵌套作用域的语言中,有时不能简单直接的确定函数的引用环境。这样的语言一般有如下特性:
a、函数是第一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值。
b、函数可以嵌套定义,即在一个函数内部可以定义另一个函数。
上面的叙述比较概念化,下面通过例子来解释闭包:
//code1:
function makePowerFn(power){
function powerFn(base){
return Math.pow(base, power);
}
return powerFn;
}
var square = makePowerFn(2);
alert(square(3)); // return 9
所谓闭包,即是由函数和与其相关联的引用环境组合而成的实体。
所谓引用环境是指在执行程序中的某个点所有处于活跃状态的约束所组成的集合。其中的约束是指一个变量的名字和其所代表的对象之间的关系。那么为什么要把引用环境和函数结合起来呢?这主要是因为在支持嵌套作用域的语言中,有时不能简单直接的确定函数的引用环境。这样的语言一般有如下特性:
a、函数是第一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值。
b、函数可以嵌套定义,即在一个函数内部可以定义另一个函数。
上面的叙述比较概念化,下面通过例子来解释闭包:
//code1:
function makePowerFn(power){
function powerFn(base){
return Math.pow(base, power);
}
return powerFn;
}
var square = makePowerFn(2);
alert(square(3)); // return 9