[英]Check for typeOf undefined not working?
有人可以解释为什么这行不通吗?
setOrientation: function() {
if (typeof oldOrientation !== 'undefined') console.log(oldOrientation);
let oldOrientation = orientation;
//other code
}
抛出oldOrientation is undefined
。 我最终只是简单地删除了let
,它开始起作用,但是我很难完全理解为什么。 我认为这与范围界定有关吗?
我通过在全局范围内声明oldOrientation
解决此问题,我只想了解为什么对typeof
的比较不能按oldOrientation
进行。
在ECMAScript 2015中,let绑定不受变量提升的约束,这意味着let声明不会移到当前执行上下文的顶部。 在初始化之前在块中引用变量会导致ReferenceError(与用var声明的变量相反,该变量将仅具有未定义的值)。 该变量从块的开始一直处在“时间死区”中,直到进行初始化为止。
表示您在定义变量之前使用了变量。
如果您曾经使用过var
,那么由于提升,会发生var
声明移动到块作用域的顶部的情况。 所以下面的功能
function foo() {
console.log(typeof bar)
var bar = "123";
}
被视为
function foo() {
var bar;
console.log(typeof bar)
bar = "123";
}
但是,当您使用let
,它们不会被悬挂,因此声明不会移动到块的顶部。
想象一下这种简化的情况:
let a = 1;
{
alert(a);
let a = 2;
}
然后Alert(a)将进行变量查找。 从当前作用域(块)开始,该作用域已声明了自己的变量( let a ),但尚未设置( a = 2 ),因此尚未定义。 上限等于:
let a = 1;
{
let a /* = undefined */;
alert(a);
a = 2;
}
(在执行代码之前声明变量称为提升 ...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.