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