前言
关于变量,在Javascript核心知识体系中,占比不重,即使有些迷惑行为,也认为Javascript本应就如此,就因为下意识的草率,导致这些小问题成了日后进阶的壁障。
这里就先从两个极为经典的问题开始吧。
变量提升和暂存死区
先来两个示例:
其一:变量提升
console.log(typeof number); // undefined
var number = 1000;
console.log(number); // 1000
应用中,var
声明的变量能够提前使用虽然只是undefined, 我们把这种现象称之为变量提升。事实上,var
声明的变量奇怪之处并不只是如此,例如window.number
,它返回的是1000
!
它声明的变量被绑定到了window全局对象
上,甚至在Javascript代码中,可以允许重复声明。这又是为什么?
但是,如果我们这样使用:
console.log(typeof isNaN); // function
var isNaN = 1000;
var isNaN;
console.log(isNaN); // 1000
不知有没有发现, isNaN不仅提升了,甚至有一个值(当然这是来自window)
总体而言, 如果说这么多的迷惑行为都是Javascript本质特征,说实话很难让人信服。
其二 暂存死区
var a=100,b=200,c=300,d=400;
var f =