作用域的定义:变量起作用的范围
局部变量的作用域是它自己所在的函数及其嵌套函数
示例1:
function getCounter(){
var i=0;
return function (){
i++;
alert(i);
}
}
var counter = getCounter();
counter();
counter();
counter();
//释放闭包与它的环境
counter = null;
counter = getCounter();
counter();
counter();
counter();
//--------------------------------------------示例1结束
普通局部变量在其所在的函数执行完成后就被销毁了。
一旦函数中有嵌套函数被传出,则函数中的所有局部变量(或叫执行环境)在函数结束后将不被销毁。
当一个(嵌套)函数在创建它的环境之外执行的时候,就是闭包。
闭包组成包含函数和创建它的环境。
切断对闭包的引用可以释放闭包
示例2:
function getCounter(step){
var i=0;
return function (){
i += step;
alert(i);
}
}
var counter = getCounter(1);
counter();
counter();
counter();
//释放闭包与它的环境
counter = null;
counter = getCounter(2);
counter();
counter();
counter();
//--------------------------------------------示例2结束
从示例2看,闭包实际是函数工厂中创造出来的产物。
函数工厂可以用闭包的方式构造出共同的函数体和不同的执行环境。
局部变量的作用域是它自己所在的函数及其嵌套函数
示例1:
function getCounter(){
var i=0;
return function (){
i++;
alert(i);
}
}
var counter = getCounter();
counter();
counter();
counter();
//释放闭包与它的环境
counter = null;
counter = getCounter();
counter();
counter();
counter();
//--------------------------------------------示例1结束
普通局部变量在其所在的函数执行完成后就被销毁了。
一旦函数中有嵌套函数被传出,则函数中的所有局部变量(或叫执行环境)在函数结束后将不被销毁。
当一个(嵌套)函数在创建它的环境之外执行的时候,就是闭包。
闭包组成包含函数和创建它的环境。
切断对闭包的引用可以释放闭包
示例2:
function getCounter(step){
var i=0;
return function (){
i += step;
alert(i);
}
}
var counter = getCounter(1);
counter();
counter();
counter();
//释放闭包与它的环境
counter = null;
counter = getCounter(2);
counter();
counter();
counter();
//--------------------------------------------示例2结束
从示例2看,闭包实际是函数工厂中创造出来的产物。
函数工厂可以用闭包的方式构造出共同的函数体和不同的执行环境。