执行for循环将另一个对象添加到Javascript中的作用域链中
Does a for loop add another object to the scope chain in Javascript?
我看了这个:http://www.youtube.com/watch?v=mHtdZgou0qU昨天,我一直在思考如何改进我的javascript。在重写一部在萤火虫中看起来波涛汹涌的动画时,我尽量把他说的每一句话都记在心里。
我想知道的一件事是for
循环是否会添加到作用域链中。Zakas谈到了闭包是如何添加到作用域链中的,并且访问本地作用域之外的变量往往需要更长的时间。对于for
循环,由于您可以在第一条语句中声明一个变量,这是否意味着它正在向链中添加另一个作用域?我认为不会,因为Zakas也说过do-while
、while
和for
循环之间没有区别,但看起来仍然是这样。
我问这个问题的部分原因是,在JS库中,我经常看到这样的代码:
function foo(){
var x=window.bar,
i=0,
len=x.length;
for(;i<len;i++){
//
}
}
如果for
循环确实在链上添加了另一个对象,那么这将是非常低效的代码,因为循环内的所有操作(假设它们使用i
)都将访问范围外的变量。
同样,如果我被要求下注,我会说他们没有,但为什么所用的变量不能在循环之外访问呢?
JavaScript没有块作用域,并且具有变量提升,因此任何看起来在for
循环中定义的变量实际上都没有在那里定义。
您在示例中看到类似代码的原因是因为提升行为。代码的作者知道变量提升,所以在一开始就声明了范围的所有变量,所以JavaScript在做什么就很清楚了。
相关文章:
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- Javascript作用域和Ajax调用;工作不正常
- switch语句中的Javascript作用域
- JavaScript作用域:如何创建具有不同值的匿名函数
- Javascript作用域规则和mongo-map/reduce函数
- Javascript作用域问题,对象在分配后没有数据
- 可能存在Javascript作用域问题
- 本地Javascript作用域问题
- 从另一个文件调用时出现Javascript作用域错误
- JavaScript 作用域和 Angular JS 作用域之间的区别是什么?
- JavaScript 作用域:在函数后保留全局变量值
- Javascript:作用域链/变量查找性能
- ES6中的JavaScript作用域已转换
- Javascript作用域意外结果
- 订阅服务器模式中的Javascript作用域
- 了解Javascript作用域和变量
- 绑定时出现Javascript作用域问题
- Javascript作用域链式吊装
- javascript作用域和jquery's$(文档).准备好了
- Javascript作用域问题:函数在$(doc).ready()中可用,但在事件处理程序中不可用