JavaScript中for循环里作用域只有函数作用域和全局作用域,在函数体内使用var 定义的变量,会被提到函数开始处进行定义,关于作用域可能出现问题!
原始用var定义的for循环变量i
for (var i = 0; i < links.length; i++) {
links[i].onmouseover = function() {
moveElement("preview", 0, -100 * (i + 1), 10);
}
}
结果只是给其赋值,由于作用域的影响,循环时,对function里的i无作用,输出相同的结果。
es6提供的let,在当前声明的变量作用域里有用
如下图:
for (let i = 0; i < links.length; i++) {
links[i].onmouseover = function() {
moveElement("preview", 0, -100 * (i + 1), 10);
}
}
i可以作用于function里,每次循环都可以使用到
因为let定义的变量是块级的变量