我想了解为什么在执行相同操作时会有性能差异?
性能可以用 {} 这个对象字面量来解释:
JavaScript 中的作用域管理机制使对象字面量 {} 的执行速度更快
当 JavaScript 代码被执行时,会创建一个执行上下文。执行上下文(有时也称为作用域)定义了代码要在其中执行的环境。
在页面加载时创建全局执行上下文,并在函数执行时创建其他执行上下文,最终创建一个执行上下文堆栈,其中顶部的上下文是活动的上下文。
每个执行上下文都有一个与之关联的作用域链,用于标识符解析。作用域链包含一个或多个变量对象,这些对象为执行上下文中的标识符定义了作用域范围。
全局执行上下文的作用域链中只有一个变量对象,该对象定义了 JavaScript 中所有全局变量和函数。
当创建函数(但未执行时),其内部的 [[Scope]] 属性被赋值为它所创建的执行上下文的作用域链(无法通过 JavaScript 访问内部属性,因此无法直接访问此属性)。
稍后,当执行流进入函数时,将创建一个激活对象,并使用 this、arguments、命名参数和任何局部于函数的变量进行初始化。激活对象首先出现在执行上下文的作用域链中,然后是函数的 [[Scope]] 属性中包含的对象。
在代码执行期间,通过搜索执行上下文的作用域链来解析诸如变量和函数名称之类的标识符。
标识符解析从作用域链的前面开始,向后进行。考虑以下代码:
function Add(n1, n2) {
this.n1 = n1;
this.n2 = n2;
this.val = this.n1 + this.n2;
}
var result = new Add(5, 10);
当执行此代码时,add函数有一个[[Scope]]属性,其中仅包含全局变量对象。
new Object()
比{}
多做了一些事情。 - Ja͢ck[]
比arr = new Array快?密切相关。 - Praveen