9

我的问题在于我正在学习 JavaScript 但对编程一点也不陌生。我理解提升,但是在严格模式下,这不应该产生错误并在将 6 分配给未声明的变量或 document.getElement... 被分配 x 这不会产生错误时被捕获,所以我的诊断是提升仍在继续..我不喜欢并且想通过使用严格来摆脱。使用 Chrome 版本 42.0.2311.152 m 作为我的浏览器

function strictMode(){
    'use strict';
    try {
        x = 6;
        document.getElementById('hoisting').innerHTML = x;
        var x;
     }
     catch(err) {
                    document.getElementById('error_report').innerHTML = 
                        "There was an error that occured (Were in Strict Mode)" +
                            " " + err.message;
               }
}
4

3 回答 3

14

变量声明(即var x;)在它们写入的整个范围内都有效,即使您在分配后声明也是如此。这就是“提升”的含义:var x;被提升到范围的开头,并且分配x = 6;很好,因为x已在该范围的某处声明。

严格模式不会改变这一切。如果您完全省略声明,它将引发错误var x;;如果没有严格模式,变量的范围将隐含地成为全局范围。

在 ES2015(又名 ES6)中,通过使用let关键字而不是var. (另一个区别是用 声明的变量let是周围块的局部变量,而不是整个函数。)

于 2015-05-31T16:02:10.053 回答
0

javascript 允许一些奇怪的事情,作为学习该语言的人,您必须学会与良好的编码实践作斗争(分号是另一个很好的例子)。在提升的情况下,通常最好将变量声明在它们将被提升到的范围的顶部。如前所述,严格模式不是灵丹妙药,不会为您强制执行。

于 2015-05-31T16:10:07.340 回答
0

简而言之,严格模式下的 JavaScript 不允许使用未声明的变量。这里没有任何内容与它禁用提升有关。如果未声明正在初始化的变量,它只会引发错误。

于 2021-01-28T06:48:55.683 回答