'use strict'不停止在功能范围内吊装

Zac*_*ins 6 javascript using strict hoisting

我的问题在这里,我正在学习JavaScript,但根本不是编程新手.我理解提升,但是使用严格模式不应该产生错误,并且当6被分配给未声明的变量或文件时被捕获.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;
               }
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 13

变量声明(即var x;)对于它们所写的整个范围都是有效的,即使您在分配后声明也是如此.这就是"提升"的意思:它var x;被提升到范围的开头,并且赋值x = 6;很好,因为x已经在该范围内的某处声明了.

严格模式不会改变任何此类.如果你完全省略了声明,就会抛出错误var x;; 如果没有严格模式,变量的范围将隐含为全局范围.

在ES2015(又名ES6)中,通过使用let关键字代替而避免了提升var.(另一个区别是声明的变量let是周围块的本地变量,而不是整个函数.)