作用域 全局作用域,作用域链,在自身找不到向上级找,再到全局找,都找不到,报错
<button>1</button> <button>2</button> <button>3</button> <button>4</button> var btn = document.querySelectorAll('button'); for (var i = 0; i < btn.length; i++) { btn[i].onclick = function () { alert(i); } } var i = 6; // 点击 button后,输出的都是 6 ,因为 里面 alert 的 i ,是一个全局变量, // 等到点击的时候,已经for循环完毕,赋值为6了 ------------------------------------- var btn = document.querySelectorAll('button'); var i = 6; for(var i = 0 ; i<btn.length; i++){ (function(index){ btn[index].onclick = function(){ alert(index) } })(i) } var i = 6;变量 // 点击 button ,输出 0 1 2 3 因为闭包,i是一个局部变量,循环出了 几个不同的闭包函数, 这个i的值,保存在函数作用域内,取值的时候,函数内有,就用函数的 --------------------------------------- var btn = document.querySelectorAll('button'); var i = 6; for(var i = 0 ; i<btn.length; i++){ fn(i); } var i = 6; function fn(index){ btn[index].onclick = function(){ alert(index) } } // 这样,也是在函数内,0 1 2 3