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);
//采用自调用函数
}
}
上一篇:c++中, const变量默认仅在当前文件内有效


下一篇:Uncaught TypeError: form.attr is not a function 解决办法