gpt4 book ai didi

javascript - 使用 javascript 限定符时 safari 和 chrome 之间的不同行为 `const`

转载 作者:行者123 更新时间:2023-12-02 15:39:58 25 4
gpt4 key购买 nike

我对 JavaScript 很陌生。我想知道为什么代码打击会在 safari 和 chrome 之间给出两种不同的结果。

<!DOCTYPE html>
<html>
<head>
<h1> test </h1>
</head>
<body>
<div id='test'> </div>
<div id='num0' style='display:none'> number one</div>
<div id='num1' style='display:none'> number two</div>

<script type="text/javascript">
for (var i = 0; i <2; i++){
const data = document.getElementById("num"+i).innerHTML;
var newDiv = document.createElement("div");
newDiv.id = i;
newDiv.innerHTML = data;
document.getElementById('test').appendChild(newDiv);
}
</script>
</body>
</html>

Safari :

test
number one
number two

Chrome :

test
number one
number one

似乎 safari 忽略了 const 限定符。这是未定义的行为吗?幕后发生了什么?

最佳答案

Safari 的行为是正确的。 const 是 block 作用域的,因此每当重复循环时,前一次迭代的 const 限定变量不再可用,因此新的 const data 声明可以成功 - 就像 let 一样。在严格模式下,Chrome 的行为也与 Safari 类似。

在非严格模式下,Chrome 使用 const 的旧形式,其中 (const) 变量声明被提升,并且更新变量的尝试将被静默忽略。

示例:

function log(msg) {
document.body.appendChild(document.createElement('div')).textContent = msg;
}
(function() { // Chrome 45 (BAD) : 0 0 0
log('No strict mode');
for (var i = 0; i < 2; ++i) {
const data = i;
log(data);
}
try {
log(data); // Should fail
} catch (e) { log(e); }
})();
(function() { // Chrome 45 (GOOD): 0 1 ReferenceError: data is not defined
'use strict';
log('In strict mode');
for (var i = 0; i < 2; ++i) {
const data = i;
log(data);
}
try {
log(data); // Should fail
} catch (e) { log(e); }
})();

关于javascript - 使用 javascript 限定符时 safari 和 chrome 之间的不同行为 `const`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32665347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com