第二章 词法作用域

其实就是指的我们平时说的作用域、作用域链这些。

查找

词法作用域查找,只会查早一级标识符,如果遇到了foo.bar.baz这种,词法作用域只会查找foo标识符,找到这个变量之后,对象的访问属性规则会分别接管对barbaz属性的访问。

欺骗词法

这种做法会导致性能下降,因为他们会修改或者创建新的作用域。javaScript引擎会在编译阶段进行数项优化,其中有一项就是能够根据代码的词法进行静态分析,并预先确定所有变量和函数的定义位置,这样在执行的过程中就能快速找到标识符,提高性能。但是如果存在eval、with这种词法欺骗,引擎就无法在词法分析阶段明确这两个地方会如果影响作用域,最差的情况是使用了他们之后,javaScript不会进行任何优化,严重影响性能。
所以应该避免使用词法欺骗。

  • eval:接收的字符串会被视为好像在书写时就存在于程序中的这个位置,会不受控的修改作用域中的变量。在严格模式下它有自己的作用域,无法修改所在的作用域。像setTimeout、setInterval、new Function()也可以接收字符串,然后字符串内容会被解析为一段代码,这些功能已经不再提倡使用
  • with: 会创建新的作用域
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值