Javascript:{}vs new Object()性能
我想了解为什么两者做相同的事情时性能会有差异Javascript:{}vs new Object()性能,javascript,performance,Javascript,Performance,我想了解为什么两者做相同的事情时性能会有差异 {}的性能可以解释为: {}是Javascript中对象的文字,文字的计算速度更快 另外,文字在代码中占用的空间更少,因此总体文件大小为 小一点 literal代码的最终结果与新的Object()代码相同,但在几乎所有浏览器中执行速度都更快(Firefox 3.5几乎没有任何区别) 随着对象属性和数组项数量的增加,使用文字的好处也随之增加 由于Javascript中的作用域管理机制,对象文本{}的执行速度更快 在执行JavaScript代码时,将创
{}的性能可以解释为:
小一点
function Add(n1, n2) {
this.n1 = n1;
this.n2 = n2;
this.val = this.n1 + this.n2;
}
var result = new Add(5, 10);
执行此代码时,add函数有一个[[Scope]]属性,该属性仅包含全局变量对象
当执行流入add函数时,将创建一个新的执行上下文,并将包含该上下文、参数、n1和n2的激活对象放入范围链中
下图“执行上下文和范围链的关系”说明了执行add函数时发生的幕后对象关系
在add函数内部,当函数执行时,需要解析标识符num1和num2
通过检查作用域链中的每个对象直到找到特定标识符,可以执行此解析
搜索从范围链中的第一个对象开始,该对象是包含函数局部变量的激活对象
如果在那里找不到标识符,将检查作用域链中的下一个对象的标识符。找到标识符后,搜索停止
在本例中,标识符num1和num2存在于本地激活对象中,因此搜索永远不会继续到全局对象
理解JavaScript中的作用域和作用域链管理非常重要,因为标识符解析性能与作用域链中要搜索的对象数量直接相关
标识符存在的范围链越高,搜索持续的时间越长,访问该变量所需的时间也越长;如果没有正确管理作用域,它们可能会对脚本的执行时间产生负面影响。一般来说,我认为literal将比构造函数更快。基本上,
new Object()
比{}
做更多的事情。这个答案更接近:在与Pilot密切相关的mdn中,请在上面的回答中的性能标题下找到我的更新。{}是文字,在javascript中文字的计算速度更快,但new Object()是对函数Object()的构造函数调用,函数Object()有自己的定义,需要花费相对更多的时间来计算。通过{}创建对象时我们实际上是在声明它,在javascript中,声明是在函数之外首先处理的。嘿,Pilot,你对解释满意吗?这个答案中有一个非常好的观点:--总之,你可以设置一个函数来创建文本符号或构造函数形式的实例。使用文字符号创建实例时,每个实例都携带所有方法,而使用构造函数时,所有实例都引用原型方法。Ie构造函数在创建多个实例时具有更好的内存性能。