春雨_Yang

努力不一定成功,但放弃一定会失败。

导航

变量作用域链

var Odiv = document.getElementsByTagName("div")
	for(var i=0;i<3;i++){
		Odiv[i].onclick = function(){alert(i)}
	}//当点击Odiv[i]的时候,alert(i)弹出来的是3,因为当这个方法运行时循环已经循环完毕

内部的方法使用外部的变量,会以外部变量最后一个值为准。

//Odiv[i]是for循环就运行,alert(i):是定义了没运行,onclick的时候才运行,所以alert弹出5

//匿名方法:()()第一个()是定义方法,第二个()是运行方

解决以上问题的办法

 

 1 var Odiv = document.getElementsByTagName("div")
2 //这个方法是先运行as(),然后将as方法中的所有循环为false时跳出
3 function as(){
4 for(var i=0;i<3;i++){
5 Odiv[i].onclick = function(){alert(i)}
6 }
7 }
8 as();
9 //循环开始时执行(i),(i)的值传给function(k),这是一个匿名方法的运行。
10 //其实就是一个闭包的作用,将外部的变量和内部的变量隔离开。
11 for(var i=0;i<3;i++){
12 (function(k){
13 Odiv[k].onclick = function(){alert(k)}
14 })(i)
15 }

 

posted on 2011-10-14 11:18  春雨_Yang  阅读(134)  评论(0编辑  收藏  举报