我很想談談這段代碼更高效的一些其他意見。基本上在下面的代碼中,有一個setInterval循環,並且在循環中運行代碼之前,我需要4個要求。所以在第1節中,我寫了一個if語句來檢查所有4.工作正常。Javascript:什麼是更有效率,IF塊或TRY/CATCH?
然後我切換到只使用try/catch,我想要執行的代碼坐在try {}中。邏輯是,在每個循環中,都會生成一個異常,但是會針對每個無效條件進行抑制。在所有條件都成立的最後一個循環中,代碼執行並清除間隔。
要麼工作。我喜歡try/catch方法,因爲我需要編寫更少的條件代碼,並擔心中斷。但我擔心try/catch效率非常低,特別是在100ms的setInterval()循環中。這裏對於其他聰明人心態有什麼看法?
的try/catch
var intvar = setInterval(function(){
try{
clearInterval(intvar);
jQuery('#'+nav[pageid].t1+'>a').replaceWith(jQuery('<span>'+jQuery('#'+nav[pageid].t1+'>a').text()+'</span>'));
//set display classes for nav
jQuery('#'+nav[pageid].t1).addClass('selected').find('#'+nav[pageid].t2).addClass('subselect'); //topnav
jQuery('#'+nav[pageid].t3).addClass('selected').find('#'+nav[pageid].t4).addClass('subselect'); //leftnav
}catch(err){}
},100);
IF塊
var intvar = setInterval(function(){
if(typeof jQuery == 'function' && typeof nav == 'object' && typeof pageid != 'undefined' && typeof document.getElementById('leftnav') == 'object'){
clearInterval(intvar);
jQuery('#'+nav[pageid].t1+'>a').replaceWith(jQuery('<span>'+jQuery('#'+nav[pageid].t1+'>a').text()+'</span>'));
//set display classes for nav
jQuery('#'+nav[pageid].t1).addClass('selected').find('#'+nav[pageid].t2).addClass('subselect'); //topnav
jQuery('#'+nav[pageid].t3).addClass('selected').find('#'+nav[pageid].t4).addClass('subselect'); //leftnav
}
},100);
完全與此相當大膽的這一說法。例如。在Python [`嘗試except`是首選(http://stackoverflow.com/questions/1835756/using-try-vs-if-in-python)另外,說什麼是「昂貴」的一些數據將是不錯。再次,在Python [「如果」更「昂貴」](http://stackoverflow.com/a/3929887/1167879)。 – 2013-02-23 18:11:28
當然,OP在詢問Javascript而不是Python。另外,您可能想要閱讀您提供的鏈接。它說的基本上與cdmckay所做的一樣:使用異常來處理特殊情況。 – JAB 2015-11-12 17:48:56
@AlexOkrushko的EAFP理念,更容易請求原諒比許可,由Python社區沒有JS採納。 – 2017-05-18 09:38:43