Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Microsoft边缘块作用域问题_Javascript_Html_Ecmascript 6_Microsoft Edge - Fatal编程技术网

Javascript Microsoft边缘块作用域问题

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

以下代码在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', 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)
    });
}