javascript - 'use strict' 不停止功能范围内的提升

标签 javascript using strict hoisting

我的问题就在这里我正在学习 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;
               }
}

最佳答案

变量声明(即 var x;)在它们写入的整个范围内有效,即使您在分配后声明也是如此。这就是"hoisting"的意思: var x; 被提升到范围的开头,赋值 x = 6; 没问题,因为 x 已在某处声明在那个范围内。

Strict mode不会改变任何这一切。如果您完全省略 var x; 声明,它抛出一个错误;如果没有严格模式,变量的作用域将隐式为全局作用域。

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

关于javascript - 'use strict' 不停止功能范围内的提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559411/

相关文章:

C# 将 block 与引用 IDisposable 对象的匿名方法一起使用

javascript - 如何在提交表单之前更改表单元素的ID?

javascript - 回调究竟如何获取它们的参数?

javascript - 带有 typeof 表达式的 ng-switch

oracle - 如何在.NET中关闭OracleConnection

c++ - 在 C++ 模板中使用 'using' 的正确做法

javascript - 为什么在 IE 上多次声明 className 会破坏应用程序?

php - 严格标准 : Only variables should be passed by reference - php error

typescript - Phaser + TypeScript 严格模式

javascript - 如何在 jQuery 中编辑一个表的所有 TR 的值