JavaScript中的高效函数声明

时间:2014-07-17 11:53:40

标签: javascript

我有一些需要每6秒运行一次的javascript代码,如下所示:

this.y = function()
{
    //some logic that may or may not call y_a or y_b

    this.y_a = function()
    {
         //some logic
    }
    this.y_b = function()
    {
         //some logic
    }

    var self = this;
    setTimeout(function(){ self.y(); }, 6000);
}
y_a范围之外不需要

y_by

由于此功能每6秒调用一次,因此继续重新声明y_ay_b是否效率极低?或者我应该在y范围之外定义它们吗?

4 个答案:

答案 0 :(得分:2)

  

由于此功能每6秒调用一次,所以继续重新声明y_ay_b会非常低效吗?

可能不是。从计算机的角度来看,六秒钟之间的间隔时间非常长。

  

或者我应该在y范围之外定义它们吗?

可能,除非你每次都有充分的理由重新定义它们。

答案 1 :(得分:1)

执行JS时,范围越近,分辨率越快。 说,6秒是CPU时间的永恒。

我将其编码为:

function y () {
    function a() {..}
    function b() {..}

    //calling a and b
}
setInterval(y, 6000); // timeout is for one execution, interval for recurrent executions

答案 2 :(得分:0)

是的,继续重新声明y_a和y_b是低效的。然而,正如克劳德已经注意到的那样,6秒的时间间隔不会真的变慢。

那就是说,我认为你使用的是错误的模式。而是去做这样的事情:

y = (function()
{
    //we create the functions inside this anonymous scope
    function y_a()
    {
        //do stuff
    }

    function y_b()
    {
        //do stuff
    }

    //we return a function, that in its turn has access to the scope
    //were the above funcs are delared. They are however hidden for the outside
    return function()
    {
        if ( a )
        {
            y_a();
        } else
        {
            y_b();
        }
    }
})();

setTimeout(function(){ y(); }, 6000);

答案 3 :(得分:0)

如果要以6秒的间隔调用该函数,那么最好使用setInterval()。 因为setTimeout仅用于超时后的一次执行。

如果您有选择,请在Y之外声明您的函数y_a和y_b,然后添加: -

function y_a() {
}
function y_b() {
}
function y() {
    y_a();
    y_b();
    //calling y_a and y_b
} 
window.setInterval(y,6000) // 6 secs = 6000 ms

对于页面刷新时的初始调用,您需要在ready()中调用该函数。然后在每6秒后自动调用该函数。