关于Javascript范围和提升的困惑

阿尔夫·莫(Alf Moh)
<!DOCTYPE>
<html>
<head>
    <link rel="stylesheet" href="styles.css"/>
    <body>
        <ul id="people-list"></ul>
        <script src="app.js"/>
    </body>
</head>
</html>

***app.js***

var people = ["alf","kay","jay","may"];
var list = document.getElementById("people-list");
for(var i =0; i< people.length; i++){
  var person = people[i];
  var element = document.createElement("li");
  (function (){
    var person = person;
    element.innerText = person;
    element.addEventListener("click",function(){
        alert("You clicked on "+ person);
    });
  }());
  list.appendChild(element);
}

为什么在IIFE中未引用在Global Scope中创建的“ person”变量,并因此生成未定义列表,但随后在IIFE中将变量名称从(例如,var person更改为var person2,并随后更改了警报)进行了更改使代码正常工作。

J

由于吊装var person = person正好等于

var person;
person = person;

您不能person在外部范围中引用该变量。它完全被局部变量所遮盖,因此您要为其分配未定义的局部变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章