javascript - 为什么单独依赖作用域链并避免在 Javascript 中显式引用 head 对象是有益的?

标签 javascript scope global

我一直在读 Cody Lindley 的这本书“Javascript Enlightenment”。在第 82 页上,他指出:“显式(例如 window.alert() 与 alert())在性能方面的成本要高一些。如果仅依赖范围链并避免显式引用头对象,速度会更快,即使你知道你想要的属性包含在全局范围内。”

我很好奇这是为什么。我认为情况恰恰相反,因为 Javascript 解释器可以跳过检查范围并直接找到它。我只是看不出不指定某物的确切地址有什么好处。

我的意思是,我知道每次我想使用包含在全局范围内的东西时我都不想键入 window.whatever() 并且我认为不指定更快是很棒的。只是不确定为什么。

只是那些“想知道”的事情之一。

最佳答案

解释器总是必须使用作用域链。当您编写 window.alert() 时,它必须沿着作用域链向上寻找 window 的值——您可能有一个名为 的局部变量window 遮蔽了头部的那个,所以它不能假设这是全局对象。

如果 JavaScript 有一种语法来明确表示顶级上下文,那会更快。但事实并非如此。

关于javascript - 为什么单独依赖作用域链并避免在 Javascript 中显式引用 head 对象是有益的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13022647/

相关文章:

javascript - JSON 与动态编码

javascript - 从ajax延迟响应中获取jsonObject

ruby-on-rails - ActiveRecord 中 default_scope 的替代方案

javascript - 使用 mockajax 的 Qunit ajax 异步调用

javascript - 使用 Angular JS ng-repeat 的动态背景图像

c++ - C++ 循环中的作用域

javascript - 如何访问 Collection View (或布局)的 templateHelper 中的特定模型?

php - 静态类与实例化时的类成员访问

objective-c - 在 Swift 中像 Objective-C 一样使用常量

c++ - 每次调用 C++ 函数时,如何防止变量被重新初始化?