Cirry's Blog

匿名函数和闭包

Jan 5, 2017
技术 js
3分钟
419字

印象笔记迁移

匿名函数:

function(){return 'dog';} //匿名函数直接运行报语法错误,无法调用

匿名函数赋值给变量:

var box = function(){return 'dog';}; //可以
box();

通过自我执行来执行匿名函数:

(function(){ //(匿名函数)();
return 'dog';
})(); //等于上面的程序

自我执行匿名函数的传参:

(function(age){
return age;
})(20);

函数里的匿名函数:

function box() {
return function () { //闭包
return 'dog';
};
}
alert(box()()); //dog,执行普通函数里的匿名个函数,或者用下面的办法
var b = box(); //同上
alert(b());

闭包

,创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量 通过闭包返回局部变量:

function box(){
var age = 100;
}
alert(age); //访问不到
function box(){
var age = 20;
return function(){
return age;
}
}
alert(box()()); //这种方式可以

使用闭包的优点和缺点

,可以避免使用全局变量

//使用全局变量累加
var age = 100;
function box(){return age++;}
alert(age); //100
box();
alert(age); //101
//使用布局变量累加
function box(){var age = 100; age++; return age;}
alert(box()); //101
alert(box()); //101
//使用匿名函数实现局部变量驻留内存中
function box(){
var age = 100;
8 collapsed lines
return function(){return ++age;};
}
var b = box();
alert(b()); //101
alert(b()); //102
alert(age); //101
b = null;
alert(b);

作用域链的机制导致一个问题,在循环中里的匿名函数取得的任何变量都是最后一个值:

function box() {
var arr = [];
for (var i = 0; i < 5; i++) {
arr[i] = function () {
return i;
};
}
return arr;
}
//alert(box());
var b = box();
for (var i = 0; i < 5; i++) {alert(b[i]);}
本文标题:匿名函数和闭包
文章作者:Cirry
发布时间:Jan 5, 2017
感谢大佬送来的咖啡☕
alipayQRCode
wechatQRCode
总访问量
总访客数人次