码迷,mamicode.com
首页 > 其他好文 > 详细

匿名函数和闭包

时间:2016-01-12 23:12:37      阅读:341      评论:0      收藏:0      [点我收藏+]

标签:

                                                          匿名函数和闭包
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数。一. 匿名函数
//普通函数
functionbox() { //函数名是 box
return‘Lee‘;
}
//匿名函数
function() { //匿名函数,会报错
return‘Lee‘;
}
//通过表达式自我执行
(function box() { //封装成表达式
alert(‘Lee‘);
})(); //()表示执行函数,并且传参
//把匿名函数赋值给变量
var box = function() { //将匿名函数赋给变量
return‘Lee‘;
};
alert(box()); //调用方式和函数调用相似
//函数里的匿名函数
functionbox() {
returnfunction () { //函数里的匿名函数,产生闭包
return‘Lee‘;
}
}
alert(box()()); //调用匿名函数
二. 闭包
闭包是指有权访问另一个函数作用域中的变量的函数, 创建闭包的常见的方式, 就是在
一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。
//通过闭包可以返回局部变量
functionbox(){
varuser=‘Lee‘;
returnfunction(){ //通过匿名函数返回box()局部变量
returnuser;
};
}
alert(box()()); //通过box()()来直接调用匿名函数返回值
varb=box();
alert(b()); //另一种调用匿名函数返回值
使用闭包有一个优点, 也是它的缺点: 就是可以把局部变量驻留在内存中, 可以避免使
用全局变量。 (全局变量污染导致应用程序不可预测性,每个模块都可调用必将引来灾难,
所以推荐使用私有的,封装的局部变量)
//通过全局变量来累加
varage=100; //全局变量
functionbox(){
age++; //模块级可以调用全局变量,进行累加
}
box(); //执行函数,累加了
alert(age); //输出全局变量
//通过局部变量无法实现累加
functionbox(){
varage=100;
age++; //累加
returnage;
}
alert(box()); //101
alert(box()); //101,无法实现,因为又被初始化了
//通过闭包可以实现局部变量的累加
functionbox(){
varage=100;
returnfunction(){
age++;
returnage;
}
}
var b = box(); //获得函数
alert(b()); //调用匿名函数
aler

匿名函数和闭包

标签:

原文地址:http://www.cnblogs.com/nankeyimeng/p/5125847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!