札早早

导航

JS---作用域和作用域链

JS---作用域和作用域链

作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。

//常犯的一个错误

  
<button id="button1">Button1</button>  
<button id="button2">Button2</button>  
<button id="button3">Button3</button> 

<script type="text/javascript">  
function buttonInit(){  
    for(var i=1;i<4;i++){  
        var b=document.getElementById("button"+i);  
        b.addEventListener("click",function(){ alert("Button"+i);},false);  
    }  
}  
window.onload=buttonInit;  
</script>  
 
//结果都是 button3!!
//这是因为,for等没有块级作用域的概念,就算是 函数,也不算是块级作用域,只能叫做为函数作用域。var i =1,相当于在函数buttonInit()里的全局变量,每次的循环,都会改变这个变量。所以i最终的结果都是3!!

//如何修改呢
function buttonInit(){  
for(var i=1;i<4;i++){  
var b = document.getElementById("button" + i);  
(function (a)  
{  
b.addEventListener("click", function () { alert("Button" + a); }, false);  
})(i);  
  //采用自调用函数
}  
}  

 

posted on 2017-11-17 14:45  札早早  阅读(226)  评论(0编辑  收藏  举报