Javascript Microsoft边缘块作用域问题
以下代码在Chrome和Firefox中运行良好,但在Edge中却无法运行: HTML:Javascript Microsoft边缘块作用域问题,javascript,html,ecmascript-6,microsoft-edge,Javascript,Html,Ecmascript 6,Microsoft Edge,以下代码在Chrome和Firefox中运行良好,但在Edge中却无法运行: HTML: 一个 两个 三个 Javascript: var listItems = document.querySelectorAll('.listItems'); for (let i = 0; i < listItems.length; i++) { let element = listItems[i]; element.addEventListener('click', functi
- 一个
两个
三个
Javascript:
var listItems = document.querySelectorAll('.listItems');
for (let i = 0; i < listItems.length; i++) {
let element = listItems[i];
element.addEventListener('click', function() {
alert('Clicked on number: ' + i)
});
}
var listItems=document.querySelectorAll('.listItems');
for(设i=0;i
当您点击列表项时,在Chrome/Firefox中分别得到0、1和2,这是正确的。在Edge中,您总是得到相同的数字(超过for循环),这表明块作用域不起作用。知道Edge有什么问题吗?或者如何克服这个问题
您还可以在相应浏览器中的a中对其进行测试。您可以使用闭包。这会将值保留在函数内部
var listItems=document.querySelectorAll('.listItems');
for(设i=0;i()=>alert('Clicked on number:'+v))(i));
}
- 一个
两个
三个
- 四个
五项
我没有在这里安装Edge进行测试,但在IE11中也会发生同样的事情。似乎不考虑在<代码>()< /代码>中声明的变量作为块的一部分。
您可以这样“修复”它(或解决它):
var listItems=document.querySelectorAll('.listItems');
for(设i=0;i 让j=i;//这不是块作用域的问题,而是迭代作用域的问题,Edge<14不支持迭代作用域。正如@zeroflagL所述,这在Edge的最新版本中不再重复。如果您需要访问Edge,我们有针对Windows、MacOS和Linux的。
var listItems = document.querySelectorAll('.listItems');
for (let i = 0; i < listItems.length; i++) {
let element = listItems[i];
element.addEventListener('click', function() {
alert('Clicked on number: ' + i)
});
}