匿名函数和闭包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名函数和闭包相关的知识,希望对你有一定的参考价值。
一.匿名函数
把匿名函数赋值给变量
var box=function(){ return ‘lee‘; } alert(box());
通过表达式自我执行
(function(){ return ‘lee‘; })();
把自我执行后的函数赋值给box;
var box=(function(){
return ‘lee‘; })();
alert(box);
二. 闭包
function box (){ return function(){ return ‘lee‘; } } alert(box()());
var b=box();
alert(b()); //更灵活一点
1.通过闭包返回局部变量 (使用闭包有一个优点和缺点 ,就是可以使局部变量驻留在原来的内存中)
function box(){ var age=100; return function(){ return age; } }
---------------------------
function box(){
var age=100;
return function(){
age ++;
return age;
}
}
var b=box();
alert(b());
alert(b()); 从而实现累加
2.循环里面的匿名函数
function box(){ var arr=[]; for (var i = 0; i < 5; i++) { arr[i]=(function(num){ return num; })(i); } return arr; } alert(box());
-----------------------------------------
function box(){
var arr=[];
for (var i = 0; i < 5; i++) {
arr[i]=(function(num){ 驻留在作用域
return num;
})(i);
}
return arr;
}
var box1=box();
for (var i = 0; i < 5; i++) {
alert(box1[i]);
}
3.javascript 没有块级作用域(模仿块级作用域)
function box(){ var arr=[]; for (var i = 0; i < 5; i++) { } alert(i); 仍然可以调用i } box();
包含自我执行的匿名行数 就可以使用块级作用域 私有域控制全局变量
function box(){
(function(){
for (var i = 0; i < 5; i++) {
}})();
alert(i);
}
box();
关于this对象
在闭包中this指向的是Window
var box ={ user:‘abc‘, getUser:function(){
var that=this; return function(){ return this;
return that; } } } alert(box.getUser()()); object window
解决办法1.对象冒充 alert(box.getUser().call(box)); 否则会发生内存泄漏
解决办法办法2 var that=this
以上是关于匿名函数和闭包的主要内容,如果未能解决你的问题,请参考以下文章