【发布时间】:2013-12-07 04:01:39
【问题描述】:
我对 JavaScript 的作用域解析机制不太熟悉。 我想知道,JavaScript 访问作用域链中“向上”一两个作用域的变量有多昂贵? 假设我有一个名为 scope3 的函数,它位于名为 scope2 的函数内,而该函数位于名为 scope1 的函数内。 如果我尝试从 scope3 访问在 scope1 中定义的变量,JavaScript 是否必须加载所有三个范围内的所有变量才能找到它?如果是这样,这种操作的成本取决于在每个作用域中定义了多少变量,对吗?
之所以产生疑问,是因为我有多个使用相同元素或值的函数。需要计算函数调用的值。 所以,我想知道检索元素并重新计算每个函数中的值是否更有效,以避免攀登范围链,或者最好将函数包装在外部范围内,检索元素/计算这些值只有一次,然后简单地从内部函数访问它们。 当然,这是我的结构的一个简化示例。实际上,我有多个范围级别。
此类案例的最佳做法是什么?
谢谢。
【问题讨论】:
-
这可能取决于引擎、它应用了哪些优化等。要获得明确的答案,请尝试这两种方法并分析您的代码(在不同的浏览器中)。然后选择更好的。
标签: javascript performance scope