在Javascript中调用函数的成本与否

时间:2012-01-26 14:01:54

标签: javascript function

比较

if (myVariable) {
    doSomething()
}

function doSomething ()
{
    // Work goes here
}

VS

doSomething();

function doSomething()
{
    if (myVariable) {
        // Work goes here
    }
}

即我的问题是,在函数外部进行检查是否更快,并避免上下文切换(我认为这是正确的术语))或者只是在函数内部进行,因为它会产生如此小的差异?

干杯。

4 个答案:

答案 0 :(得分:13)

It Just Doesn't Matter(虽然第一种方法避免了一些工作,所以它应该更快,但是数量可能小于统计噪音)。

真正重要的是哪种方法最能代表逻辑。经验法则是函数中的每个语句都应该处于相同的抽象级别。条件表达式是否比函数调用更抽象或更抽象?

答案 1 :(得分:1)

我发现第二种方法可以实现更易于维护和可读的代码。这导致很少的开销。

答案 2 :(得分:1)

在外面执行它会更快,因为每次进行函数调用都会比先检查然后调用函数稍慢。

但为什么要这么麻烦?没有人会注意到函数调用与函数调用实际正在做的事情。效率低下的DOM选择器使你的代码必须通过一个巨大的树形结构捕获并啄食大海捞针中的几根针对性能的威胁要大得多。

答案 3 :(得分:1)

这可以忽略不计;性能上的差异微乎其微,浏览器似乎也有不同的处理方式:

编辑:性能确实存在差异:大多数浏览器执行方法1的速度稍快。

//Method 1:

var t1 = Date.now();

myVariable = true;

for(var i = 0; i < 20000000; i++) {



    function doSomething ()
    {
        Math.sin(Math.cos(0));
    }

    if (myVariable) {
        doSomething()
    }

    myVariable = !myVariable;
}

console.log(Date.now() - t1);







//Method 2:

var t1 = Date.now();

myVariable = true;

for(var i = 0; i < 20000000; i++) {

    function doSomething()
    {
        if (myVariable) {
            Math.sin(Math.cos(0));
        }
    }


    doSomething();

    myVariable = !myVariable;

}

console.log(Date.now() - t1);





//Results:
//Safari:   About the same, former was slightly quicker
//Firefox:  Former was quicker
//Chrome:   About the same, latter was somewhat quicker
//Opera:    Executed the former quicker