簡體   English   中英

每次運行時進行檢查的更好編碼

[英]Better coding of making a check each time function runs

我試圖消除功能中的無用檢查,需要在應用程序啟動時分配所需的檢查變量,所以我不想每次都檢查它。

我有這樣的代碼:

btnClose.addEventListener('click', function(e) {
    window.close()
    if (appSettings.sendAnonymousStats) {
      visitor.event("Application", "App has been closed.").send()
    }
})

這是我第一次嘗試對其進行優化,因此現在無需在每次調用時都進行“ if”檢查。

let btnCloseEv = appSettings.sendAnonymousStats ? btnClose.addEventListener('click', function(e) {
    window.close()
    visitor.event("Application", "App has been closed.").send()
    }) : btnClose.addEventListener('click', function(e) {
    window.close()
})

我想知道理論上是否有更好的方法來實現我要達到的目標?

刪除單個if語句,特別是考慮到每次單擊僅發生一次,將完全不會影響運行時間。

但是,出於討論的目的,它說對性能至關重要,就像將它附加到onmousemove一樣,那么您可以通過少量更改來調整第二種方法,以減少代碼冗余。

let btnCloseEv = btnClose.addEventListener('click',
    appSettings.sendAnonymousStats ?
    function(e) {
        window.close();
        visitor.event("Application", "App has been closed.").send();
    } : function(e) {
        window.close();
    }
)

之所以可行,是因為JS中的函數是高階函數,這意味着它們被視為變量,並且可以像傳遞變量一樣傳遞。 例如,如果a和b是數字,函數或任何其他類型的變量,則此方法有效。

var c = someBoolean ? a : b;


假設每個函數都大得多,並且您想使用這種方法,但是事情變得不可讀了,最好像這樣命名每個函數並附加它們:

 function moreComplexFunc(e) { window.close(); visitor.event("Application", "App has been closed.").send(); // More complex code } function simpleFunc(e) { window.close(); } let btnCloseEv = btnClose.addEventListener( 'click', appSettings.sendAnonymousStats ? moreComplexFunc : simpleFunc ) 


現在說,您注意到moreComplexFuncsimpleFunc有很多代碼重復,您可以更進一步,並將類似的代碼分成第三個函數,如下所示:

 function commonFunc(e) { window.close(); } function func1(e) { commonFunc(e); visitor.event("Application", "App has been closed.").send(); // other code } function func2(e) { commonFunc(e); // other code } let btnCloseEv = btnClose.addEventListener( 'click', appSettings.sendAnonymousStats ? func1 : func2 ) 

支持高階功能的語言所帶來的機會確實是無窮無盡的。

萬一函數有些復雜,另一種方法是將其簡單地放在一個附加的事件處理程序中:

let btnCloseEv = btnClose.addEventListener('click',
    function(e) {
        window.close();
        /*
        ... more code ...
        */
    }
)

if (appSettings.sendAnonymousStats) {
    btnClose.addEventListener('click',
        function(e) {
             visitor.event("Application", "App has been closed.").send();
        }
}

暫無
暫無

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

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