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); //采用自调用函数 } }