0

我知道我们不能在 JavaScript 中重新分配或重新声明 const 变量,因为它是常量。但是那个代码呢?!

const myCustomDiv = document.createElement('div');

for (let i = 1; i <= 200; i++) {
    const newElement = document.createElement('p');
    newElement.textContent = 'This is paragraph number ' + i;
    myCustomDiv.appendChild(newElement);
}

document.body.appendChild(myCustomDiv);

正如我们在前面的代码中看到的,当循环迭代时, newElement const 变量 被重新声明。我知道如果我们重新分配一个const类似的属性是可以的,textContent但是我们怎么能重新声明它呢?!

我试图将声明放在const全局范围中,如下所示:

const myCustomDiv = document.createElement('div');
const newElement = document.createElement('p');
for (let i = 1; i <= 200; i++) {
    
    newElement.textContent = 'This is paragraph number ' + i;
    myCustomDiv.appendChild(newElement);
}

document.body.appendChild(myCustomDiv);

我得到了不同的输出,而改变的只是textContent同一段落的内容,如果您在控制台中运行代码,您可以看到。

我希望任何人都可以帮助并告诉我为什么会发生这种情况(如何const在循环中重新声明变量以及为什么它不能在全局范围内工作?)

以及如何以不同的值多次newElement保存相同的变量( )?myCustomDiv

4

2 回答 2

1

该变量在循环的每次迭代中创建,并且在迭代结束后也被销毁。

简单来说,就是因为变量的作用域。这个变量的生命周期只有一次迭代。

于 2020-09-14T22:22:50.857 回答
1

我不太确定您要做什么,但是我会尝试告诉您为什么要这样做。

第一个 for 循环

const myCustomDiv = document.createElement('div');

for (let i = 1; i <= 200; i++) {
    const newElement = document.createElement('p');
    newElement.textContent = 'This is paragraph number ' + i;
    myCustomDiv.appendChild(newElement);
}

document.body.appendChild(myCustomDiv);

首先让我们记住 const 并让有一个块范围,这意味着每次在你再次进入 lop 之前,垃圾收集器都会来并删除任何不需要它的东西,所以每次你进入循环内部您正在创建一个新常量。这意味着每次进入循环都会创建一个新常量。当您尝试pdiv使用数组中保存集合时。

const myCustomDiv = document.createElement('div');
const newElement = [];

for (let i = 200; --i;) {
    const aux = document.createElement('p');
    aux.textContent = 'This is paragraph number ' + i;
    newElement.push(aux);
}
...
于 2020-08-20T09:43:09.463 回答