前言
关于变量,在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

本文详细探讨了JavaScript中的变量提升和暂存死区现象,包括变量提升的示例、暂存死区的错误及原因。通过对环境记录、全局环境记录、对象式环境记录和声明式环境记录的讲解,揭示了这些概念如何影响变量的行为。全局环境记录结合了声明式和对象式记录,而对象式记录仅记录var声明的标识符。声明式记录则记录非var声明的标识符,如let和const。文章最后讨论了词法环境与变量环境的区别,以及函数提升的原理。
最低0.47元/天 解锁文章
323





