簡體   English   中英

JavaScript中的有效函數聲明

[英]Efficient function declaration in 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的范圍之外不需要y_ay_b

由於每6秒調用一次此函數,因此繼續重新聲明y_ay_b效率很低嗎? 還是應該在y范圍之外定義它們?

由於每6秒調用一次此函數,因此繼續重新聲明y_ay_b效率很低嗎?

可能不是。 用計算機術語來說,兩次通話之間的間隔非常長,為六秒鍾。

還是應該在y范圍之外定義它們?

可能是這樣,除非您有充分的理由每次都要重新定義它們。

執行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

是的,繼續重新聲明y_a和y_b效率不高。 正如Crowder早已指出的那樣,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);

如果要在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秒鍾將自動調用該函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM