您当前的位置:首页 > 网站建设笔记 >

javascript闭包的七种用法

0

一、在每个a元素上创建属性i来保存当前i的值

var one=document.getElementById("one").getElementsByTagName("a");
for(var i=0;i<one.length;i++){
	one[i].i=i;
	one[i].onclick=function(eventObject){
		ADS.preventDefault(eventObject);
		ADS.log.write(this.i);
	}
}

二、将变量i保存在匿名函数自身

var two=document.getElementById("two").getElementsByTagName("a");
for(var i=0;i<two.length;i++){
	(two[i].onclick=function(eventObject){
		ADS.preventDefault(eventObject);
		ADS.log.write(arguments.callee.i);
	}).i=i;
}

三、加一层闭包,i以函数参数形式传递给内层函数

var three=document.getElementById("three").getElementsByTagName("a");
for(var i=0;i<three.length;i++){
	(function(arg){
		three[i].onclick=function(eventObject){
			ADS.preventDefault(eventObject);
			ADS.log.write(arg);
		}
	})(i);
}

四、加一层闭包,i以局部变量形式传递给内层函数

var four=document.getElementById("four").getElementsByTagName("a");
for(var i=0;i<four.length;i++){
	(function(){
		var temp=i;
		four[i].onclick=function(eventObject){
			ADS.preventDefault(eventObject);
			ADS.log.write(temp);
		}
	})();
}

五、加一层闭包,返回一个函数作为响应事件

var five=document.getElementById("five").getElementsByTagName("a");
for(var i=0;i<five.length;i++){
	five[i].onclick=function(arg){
		return function(eventObject){
			ADS.preventDefault(eventObject);
			ADS.log.write(arg);
		}
	}(i);
}

六、new一次就产生一个函数实例

var six=document.getElementById("six").getElementsByTagName("a");
for(var i=0;i<six.length;i++){
	six[i].onclick=new Function("ADS.log.write("+i+");ADS.preventDefault(arguments[0]);");
}

七、

var seven=document.getElementById("seven").getElementsByTagName("a");
for(var i=0;i<seven.length;i++){
	seven[i].onclick=Function("ADS.log.write("+i+");ADS.preventDefault(arguments[0]);");
}
顶部中部底部