javascript for循环用于在其内部声明变量,但不在全局范围内

v09wglhw  于 2022-12-25  发布在  Java
关注(0)|答案(2)|浏览(151)

当我在for循环外声明包含li的变量时,循环只打印了一个列表项。我读到了这个问题,发现两个相同的节点不能同时出现在同一个地方,所以每次添加新的li时,循环都会删除创建的li(这导致最后只打印了一个列表项)
但是在for循环中声明变量时,代码工作了,创建了4个列表项。我想了解当我在循环中声明变量时,以编程方式发生了什么。
然后,我尝试在控制台中打印列表项的变量,它打印了4个列表项,这是否意味着当循环每次运行时,它只是更新listItem变量的值,以便一次包含多一个列表项?
但是变量的重新声明是如何发生的呢?
代码:

let theMenu = document.createElement("ul");
for (let i = 0 ; i <= 3; i++) {
    let listItem = document.createElement("li");
    theMenu.append(listItem);
}
t2a7ltrp

t2a7ltrp1#

下面是在这两种情况下for...循环迭代期间发生的情况:

  1. listItem是一个全局变量,因此menuItem保持对一个对象的单个引用。

  1. listItem是一个局部变量,在每次迭代时从头重新创建,因此menuItem保留3个不同的对象引用:

希望这些视觉效果有助于理解循环内变量作用域的概念。

axzmvihb

axzmvihb2#

一个元素只能在文档中出现一次。
如果你append一个元素已经在文档中的某个地方,那么它将被 * 移动 * 而不是克隆。
如果您将let listItem = document.createElement("li");行放在循环之外,那么您将创建一个列表项,然后将其添加到文档四次(第二次和后续几次移动它)。
如果将该行保留在循环中,则创建了四个列表项。

相关问题