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

时间:2015-05-31 15:55:03

标签: 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;
               }
}

3 个答案:

答案 0 :(得分:10)

变量声明(即<div id="trigger1"> <table class="nav-justified"> <tr> <td> Menu Area </td> <td> <div class="text-right"> <div class="dropdown"> <a id="FilterDataLabel" class="btn btn-danger" data-target="#" data-toggle="dropdown" href="#" role="button"> <span aria-hidden="true" class="glyphicon glyphicon-filter"> </span>&nbsp;&nbsp;Filter Filter Menu </a> </div> </div> </td> </tr> </table> </div> )对于写入的整个范围有效,即使您在分配后声明也是如此。这就是"hoisting"的含义:var x;被提升到范围的开头,并且赋值var x;很好,因为x = 6;已在该范围内的某处声明

Strict mode不会改变任何此类内容。如果您完全省略x声明,抛出错误;如果没有严格模式,变量的范围将隐含为全局范围。

在ES2015(a.k.a. ES6)中,使用var x;关键字而不是let来避免提升。 (另一个区别是用var声明的变量是周围块的局部变量,而不是整个函数。)

答案 1 :(得分:0)

javascript允许有一些奇怪的东西,因为有人学习这门语言,你必须学会​​用好的编码实践来打击(simicolons是另一个很好的例子)。在吊装的情况下,通常最好将变量声明在范围的顶部,无论如何它们将被吊起。如前所述,严格模式不是灵丹妙药,也不会强制执行。

答案 2 :(得分:0)

简而言之,严格模式下的 JavaScript 不允许使用未声明的变量。这里没有任何内容涉及它禁用提升。如果没有声明被初始化的变量,它只会抛出一个错误。