词法作用域

作用域

域表示的就是 范围, 即 作用范围. 就是一个名字在什么地方可以被使用, 什么时候不能使用.

在 js 中采用词法作用域

所谓的 词法( 代码 )作用域, 就是代码在编写过程中体现出来的作用范围. 代码一旦写好, 不用执行,
作用范围就已经确定好了. 这个就是所谓词法作用域.这意味着函数运行在定义它的作用域中,而不是在调用它的作用域中。

在 js 中词法作用域规则:

  1. 函数允许访问函数外的数据.
  2. 整个代码结构中只有函数可以限定作用域.
  3. 作用规则首先使用提升规则分析
  4. 如果当前作用规则中有名字了, 就不考虑外面的名字

作用域链

可以发现只有函数可以制造作用域结构. 那么只要是代码, 至少有一个作用域, 即全局作用域.
凡是代码中有函数, 那么这个函数就构成另一个作用域. 如果函数中还有函数, 那么再这个作用域中就
又可以诞生一个作用域. 那么将这样的所有的作用域列出来, 可以有一个结构: 函数内指向函数外的链式结构.

绘制作用域链的步骤:

  1. 看整个全局是一条链, 即顶级链, 记为 0 级链
  2. 看全局作用域中, 有什么成员声明, 就以方格的形式绘制到 0 级练上
  3. 再找函数, 只有函数可以限制作用域, 因此从函数中引入新链, 标记为 1 级链
  4. 然后在每一个 1 级链中再次往复刚才的行为

变量的访问规则

  1. 首先看变量在第几条链上, 在该链上看是否有变量的定义与赋值, 如果有直接使用
  2. 如果没有到上一级链上找( n - 1 级链 ), 如果有直接用, 停止继续查找.
  3. 如果还没有再次往上刚找... 直到全局链( 0 级 ), 还没有就是 is not defined
  4. 注意, 切记 同级的链不可混合查找

如何分析代码

  1. 在分析代码的时候切记从代码的运行进度上来分析, 如果代码给变量赋值了, 一定要标记到图中
  2. 如果代码比较复杂, 可以在图中描述代码的内容, 有事甚至需要将原型图与作用域图合并分析

注意

在一个函数中的任何位置定义的变量在该函数中的任何地方都可见。一般都是将变量的声明全部放到函数开始的位置, 避免出现因为提升而造成的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值