gpt4 book ai didi

javascript - 调用函数比直接调用更快?

转载 作者:行者123 更新时间:2023-12-02 12:41:05 28 4
gpt4 key购买 nike

我使用“Javascript Ninja 的 secret ”中的脚本测试了性能:

function isPrime(number) {
if (number < 2) {
return false;
}
for (let i = 2; i < number; i++) {
if (number % i === 0) {
return false;
}
}
return true;
}

console.time("isPrime");
isPrime(1299827);
console.timeEnd("isPrime");

console.time("isPrime");
isPrime.apply(1299827);
console.timeEnd("isPrime");

结果是:

isPrime: 8.276ms
isPrime: 0.779ms

似乎“申请”更快?

最佳答案

您的比较不准确,因为第一个参数传递给 applythis被调用函数的值,第二个参数传递给 apply是调用函数时使用的参数数组。所以,你的apply没有打电话 isPrime使用任何参数,因此不会运行迭代,因为条件 i < numberi 时不满足是 2 且 numberundefined :

function isPrime(number) {
console.log('calling with ' + number);
if (number < 2) {
return false;
}
for (let i = 2; i < number; i++) {
if (number % i === 0) {
return false;
}
}
return true;
}

console.time("isPrime");
isPrime(1299827);
console.timeEnd("isPrime");

console.time("isPrime");
isPrime.apply(1299827);
console.timeEnd("isPrime");

如果您使用apply正确并传入 undefined, [1299827] ,结果和预期的一样,非常相似。您还应该使用 performance.now()console 更精确在毫秒级别,但对于如此快速的操作,您可能看不到任何差异:

function isPrime(number){
console.log('calling with ' + number);
if(number < 2) { return false; }
for(let i = 2; i < number; i++) {
if(number % i === 0) { return false; }
}
return true;
}

const t1 = performance.now();
isPrime(1299827);
const t2 = performance.now();

isPrime.apply(undefined, [1299827]);
console.timeEnd("isPrime");
const t3 = performance.now();
console.log(t2 - t1);
console.log(t3 - t2);

关于javascript - 调用函数比直接调用更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52250662/

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