这个是之前面试的一道题,当时给的答案是类似下面这种:
var nodes = document.getElementsByTagName("li");
for(i = 0;i<nodes.length;i+= 1){
nodes[i].onclick = (function(i){
return function() {
console.log(i);
}
})(i);
}
然后回来网上搜了搜,结果发现答案基本就是这一种,当时那个面试官对我这答案感觉不满意,问我还有别的方法实现么,我说不知道= =
这里问问大家,要是你,你会怎么回答这到问题呢?
方式1. 使用闭包。
方式2.事件代理
方式3. 引入jQuery,使用其中的on或delegate进行事件绑定(它们都有事件代理的特性)
方式4. 使用ES6中的新特性let来声明变量
用let来声明的变量将具有块级作用域,很明显可以达到要求,不过需要注意的是得加个'use strict'(使用严格模式)才会生效。