gpt4 book ai didi

javascript - call(null) 和 call(window) 的效率

转载 作者:行者123 更新时间:2023-11-29 10:41:58 25 4
gpt4 key购买 nike

function sum (a, b, c, d) {
return a+b+c+d;
}

var result = 0;
var start = new Date().getTime();

for (var i = 0; i < 10000000; i++) {
result = sum.call(window, 1,2,3,4); // 2446 ms
//result = sum.call(null, 1,2,3,4); // 260 ms
}

var dur = new Date().getTime() - start;
alert(dur);

在非严格模式代码中,null 和 undefined 将被替换为全局对象(即浏览器中的 window 对象)。

问题来了,和上面的代码一样,为什么sum.call(null, 1,2,3,4)比sum.call(window, 1,2,3,4)跑得快??

最佳答案

不仅仅是使用窗口范围调用,使用任何具有大量成员和属性的范围调用都会导致更长的时间。

根据 ECMA 262 v5, 10.4.3 调用 null , 将导致函数的 this 指针绑定(bind)到全局。

这将缩短时间:

function sum (a, b, c, d) {
return a+b+c+d;
}

var result = 0;
var start = new Date().getTime();

for (var i = 0; i < 10000000; i++) {
result = sum.call({}, 1,2,3,4); //nearly half of the time(1607ms) which null costs(3478ms) for me.
}

var dur = new Date().getTime() - start;
alert(dur);

关于javascript - call(null) 和 call(window) 的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27269018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com