我接受了JavaScript前端开发人员职位的面试。我失败了,因为我不知道几个高级问题。请帮我理解一下至少这个。
我的问题是ECMAScript 6知识,而不是ECMAScript 5中的for循环或闭包。我不明白什么在做for/of,也不明白是谁在用ECMAScript 6代码中的魔力来不覆盖i。
问题是:
要在for循环中显示数字从1到5,每次单击按钮时,必须将控制台包装在闭包中,以获得正确的输出,因此如果使用此闭包,则不会覆盖
i变量。 在ECMAScript 6中,在for循环中我们只有回调函数,并且i不被覆盖。为什么? // ECMAScript 5用于(var i= 0;i< 5;i++) { var btn =document.createElement(按钮);btn.addEventListener(单击),函数(X){返回函数(){ console.log(x);};}(i);document.body.appendChild(console.log);} // ECMAScript 6 const ps = Array.from(document.querySelectorAll('p'));for (const i,段of ps.entries()) {paragraph.addEventListener(‘paragraph.addEventListener’,函数(){返回console.log(${i+1}: ${this.textContent});};}
发布于 2017-05-09 17:28:03
这只是一个范围问题。它与for...of循环无关.
看一看这些场景:
var是全局的
// "i" is global
for (var i = 0; i < 5; i++) {}
console.log(i);
var仍然是全球性的
// "i" is global
var i;
for (i = 0; i < 5; i++) {}
console.log(i);
let是本地的
// "i" is local
for (let i = 0; i < 5; i++) {}
console.log(i); // ReferenceError
let是全局的
// "i" is global
let i;
for (i = 0; i < 5; i++) {}
console.log(i);
https://stackoverflow.com/questions/43875966
复制相似问题