365Tools
发布时间:2024-04-13 16:30:01
闭包(closures)是 Javascript 语言的一个难点,也是它的特色,很多高级应用都是依靠闭包实现的。闭包与变量的作用域以及变量的生命周期密切相关,本节我们就来简单介绍一下。
function funOne(){ // 外部函数
var num = 0; // 局部变量
function funTwo(){ // 内部函数
num++;
return num;
}
return funTwo;
}
var fun = funOne(); // 返回函数 funTwo
以上代码就构成了一个闭包,其实就是函数 fun。
function funOne(){
var num = 0;
function funTwo(){
num++;
console.log(num);
}
return funTwo;
}
var fun = funOne();
fun(); // 输出:1
fun(); // 输出:2
fun(); // 输出:3
fun(); // 输出:4
num 是外部函数 funOne() 中的一个变量,它的值在内部函数 funTwo() 中被修改,函数 funTwo() 每执行一次就会将 num 加 1。根据闭包的特点,函数 funOne() 中的变量 num 会一直保存在内存中。
var funOne = (function(){
var num = 0;
return function(){
num++;
return num;
}
})();
console.log(funOne()); // 输出:1
console.log(funOne()); // 输出:2
console.log(funOne()); // 输出:3
此外,同一个闭包机制可以创建多个闭包函数出来,它们彼此没有联系,都是独立的,如下例所示:
function funOne(i){
function funTwo(){
console.log('数字:' + i);
}
return funTwo;
};
var fa = funOne(110);
var fb = funOne(111);
var fc = funOne(112);
fa(); // 输出:数字:110
fb(); // 输出:数字:111
fc(); // 输出:数字:112