标签:
一.匿名函数
把匿名函数赋值给变量
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
标签:
原文地址:http://www.cnblogs.com/france-008/p/5839973.html