我的问题在这里我正在学习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;
}
}
答案 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> 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 不允许使用未声明的变量。这里没有任何内容涉及它禁用提升。如果没有声明被初始化的变量,它只会抛出一个错误。