Javascript:范围链/变量查找性能
我看过几篇文章,解释了如何在Javascript中使用作用域链解析变量 他们都说变量是在运行时解析的,在作用域链上遍历并迭代查找具有该名称的变量。我还看到了支持这一观点的图表,说明了链高层变量的糟糕性能,访问时间与距离范围级别的数量大致呈线性关系 我不明白为什么访问时间不是恒定的。某个位置的变量名创建一个恒定的词典绑定。所以我天真地认为,我们应该能够 用对执行上下文的引用加上对相对于该执行上下文的变量的引用来表示相应的运行时变量引用实例Javascript:范围链/变量查找性能,javascript,Javascript,我看过几篇文章,解释了如何在Javascript中使用作用域链解析变量 他们都说变量是在运行时解析的,在作用域链上遍历并迭代查找具有该名称的变量。我还看到了支持这一观点的图表,说明了链高层变量的糟糕性能,访问时间与距离范围级别的数量大致呈线性关系 我不明白为什么访问时间不是恒定的。某个位置的变量名创建一个恒定的词典绑定。所以我天真地认为,我们应该能够 用对执行上下文的引用加上对相对于该执行上下文的变量的引用来表示相应的运行时变量引用实例 您能解释一下为什么不是这样吗。今天的JIT编译器(如V8)
您能解释一下为什么不是这样吗。今天的JIT编译器(如V8)可能会很好地优化其中的一些,但基本上是这样工作的: 例如,有一系列这样的函数
function foo() {
function bar() {
}
}
这将为foo
生成一个闭包,为bar
生成一个闭包。为了让变量查找工作,解释器必须通过边界闭包查找变量
例如,在bar
中,可以在中定义变量
- 内部功能
bar
- 内部
foo
- 在全球范围内