javascript 匿名函数的闭包(二)

//循环里的匿名函数的取值问题
function box(){
	var arr = [];
	
	for(var i = 0;i < 5;i++)
	{
		arr[i] = function(){    //arr[0] = 0,arr[1] =1 ...arr[4] = 4
			return i;
		}
	}
	
	//循环执行完毕了,i最终是4++ = 5,那么最终就是5
	
	return arr;
	
}

//alert(box()[0]);

var b = box();
//alert(b.length);
(var i = 0;i < 5;i++){
	alert(b[i]());
}

//改0
function box(){
	var arr = [];
	
	for(var i = 0;i < 5;i++){
		arr[i] = i;
	}
	return arr;
}

var b = box();
alert(b.length);
for(var i = 0;i < 5;i++){
	alert(b[i]);
}



//改1
function box(){
	var arr = [];
	for(var i = 0;i < 5;i++){
		arr[i] = (function(num){     //通过自我及时执行匿名函数
			return num;
		})(i);
	};
	
	return arr;
}

var b = box();
for(var i = 0;i < 5;i++){
	alert(b[i]);
}


//改2
function box(){
	var arr = [];
	
	for(var i = 0;i < 5;i++){
		arr[i] = (function(num){
			//num其实在这里
			return function(){    //因为闭包可以将变量驻留在内存中,和上一节课的累加是一个道理
				return num;
			}
		})(i);
	}
	
	//已经执行完毕了,num为什么可以0,1,2,3,4
	return arr;
}

var b = box();

for(var i = 0;i < 5;i++){
	alert(b[i]());
}

//不用自我执行,将匿名函数赋给一个变量也能执行
var b =function(){
	alert("Lee");
}()



function box(){
	var arr = [];
	
	for(var i = 0;i < 5;i++){
		arr[i] = function(num){
			//num其实在这里
			return function(){    //因为闭包可以将变量驻留在内存中,和上一节课的累加是一个道理
				return num;
			}
		}(i);
	}
	
	//已经执行完毕了,num为什么可以0,1,2,3,4
	return arr;
}

var b = box();

for(var i = 0;i < 5;i++){
	alert(b[i]());
}


//关于this对象
var box = {

	getThis:function(){
		return function(){
			return this;
		};
	}
};

alert(this);
alert(box.getThis()());

var user = "The Window";
var box = {
	user : "The Box",
	getUser : function(){
		//这里作用域的this是Box
		var that = this;
		return function(){
			//这里作用域的this是window
			return that.user;
		}
	}
};

//alert(box.getUser()());
//对象冒充
//box.getUser() 相当于window.box.getUser
//用box这个对象冒充window对象
//当调用window对象时,实际调用box对象

//alert(box.getUser().call(box));


alert(box.getUser()());


//由于IE的JScript对象和DOM对象使用不同的垃圾回收方式,
//因此闭包在IE中会导致一些问题。就是内存泄漏问题
//如果没有使用解除引用,那么需要等到浏览器关闭才得以释放。
function box(){
	var oDiv = document.getElementById("oDiv");
	
	
	//让这个点击事件指向这个匿名函数
	var text = oDiv.innerHTML;
	
	oDiv.onclick = function(){
		alert(text);
	};
	
	oDiv = null;   //解除引用,等待垃圾回收
	alert(oDiv);
}
box();





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值