for(let i = 0;i<buttons.length;i++){
buttons[i].onclick = function(){
console.log(i);
}
}
JS是否在全局范围内创建buttons.length
范围?或者JS只在全局创建一个范围?
答案 0 :(得分:0)
使用let
代替var
来定义i
的原因使每个按钮在点击时记录正确 i
, ,因为let
在i
循环中定义for
,而var
在循环外定义它。
使用let
:
var buttons = document.getElementsByTagName("button");
for (let i = 0; i < buttons.length; i++) buttons[i].onclick =()=> console.log(i);
&#13;
<button>0</button>
<button>1</button>
<button>2</button>
&#13;
使用var
:
var buttons = document.getElementsByTagName("button");
for (var i = 0; i < buttons.length; i++) buttons[i].onclick =()=> console.log(i);
&#13;
<button>0</button>
<button>1</button>
<button>2</button>
&#13;
在引入let
之前,必须提出花式方法在函数内部传递i
,例如使用Immediately Invoked Function Expression。< / p>
使用IIFE
:
var buttons = document.getElementsByTagName("button");
for(var i = 0; i < buttons.length; i++) {
buttons[i].onclick = (function (i) {
return ()=> console.log(i);
})(i);
}
&#13;
<button>0</button>
<button>1</button>
<button>2</button>
&#13;