精读Javascript系列(二)环境记录与词法环境

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

前言

关于变量,在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 = 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值