提高javascript效率 一次判斷,而不要次次判斷
更新時間:2012年03月30日 23:58:39 作者:
提高javascript效率 一次判斷,而不要次次判斷,學習js的朋友可以參考下
判斷嘛,就是面臨2個或以上的選項時進行選擇。比如我家門前去公司有一個岔路,只要我第一次知道了哪一條路是對的,那我下一次或以后的每次都不用再思考了,直接走那條路即可——當然,突發(fā)天災時不算。
做出判斷是需要時間的,是需要對應條件的。正確的判斷很好,但每次面臨岔路,哪怕是走了無數(shù)次的岔路,都來進行一下判斷,無疑是一種腦殘行為。
下面來看一個我們平時經(jīng)常看到的JS函數(shù),他的作用是判斷瀏覽器類型然后設置對應的透明度屬性:
function setAlpha(obj,alpha){
if (-[1,]) obj.style.opacity = alpha / 100;
else obj.style.filter = "alpha(opacity=" + alpha + ")";
}
這個函數(shù)有錯嗎?沒有。先判斷瀏覽器是否是標準瀏覽器,如果是,就直接通過opacity設置透明;如果不是,則使用IE濾鏡來實現(xiàn)透明度。
邏輯清晰,代碼簡練,精品??!
不過,沒有錯誤,卻有失誤。
通常,這種設置透明度的函數(shù)都會用來制作淡入淡出效果,也就是說它會被setTimeout一次次的調(diào)用,直到循環(huán)結束。
這時候問題就來了?;氐角懊娴牟砺穯栴},這個函數(shù)就相當于,每次來到路口,都要思考判斷。第1次,來到路口,騷等,我看看,噢,是firefox啊,走第1條路;第2次,又來到這路口,等等,我看看,噢,又是firefox啊,還走第1條路……第3次……第4次。。。。不管多少次,這個函數(shù)都會像最敬業(yè)的交警一樣來查看你的身份————你,不煩嗎?你不煩我都煩了!
這時候,如果你是過路的,你肯定希望這個交警消失。
其實,遇到岔路我們可以這樣:既然已經(jīng)知道只走一條路,那我干脆把另外的路給堵死算了!當然在現(xiàn)實生活中不可能這樣做,不過在代碼里卻不難實現(xiàn),換個思路即可。
javascript有個神奇的地方,就是匿名函數(shù)(通常用來自執(zhí)行),自執(zhí)行函數(shù)的意思是呢,他聲明的時候就執(zhí)行掉了,以后就不會再出現(xiàn)了,你想找都不定能找到!個人覺得,這個性不錯。
看下面的代碼,同樣是設置透明度的函數(shù):
var setAlpha = (function(obj,alpha){
var set;
if (-[1,]) {
set = function (obj,alpha) {
obj.style.opacity = alpha * 0.01;
}
}
else {
set = function(obj,alpha){
obj.style.filter = "alpha(opacity=" + alpha + ")";
}
}
return set;
})()
也許你要不滿了:這是什么玩意兒啊,好像初學者的水平(被你看穿了。。。)但是!這個卻比前面的版本效率高很多。不信你可以在firefox和ie6下分別alert一下這個函數(shù),就明白了。
通過自執(zhí)行函數(shù),當聲明setAlpha的時候就執(zhí)行了函數(shù),而這個函數(shù)的作用就是,判斷瀏覽器,并確定該使用哪種設置透明度的方法。由于瀏覽器的類型在打開頁面后就不可能再變化,也就是以后都不用再判斷了。就算你調(diào)用10萬次這個函數(shù),他也不會再判斷,而是直接執(zhí)行。
雖然代碼丑,但境界就不同了…
這個例子只是一個小小示范,我只是希望你能明白【一次判斷,而不要次次判斷】的道理,并發(fā)揚光大。減少判斷次數(shù),對js的效率是一個很大的提高。
轉(zhuǎn)自:jo2.org
做出判斷是需要時間的,是需要對應條件的。正確的判斷很好,但每次面臨岔路,哪怕是走了無數(shù)次的岔路,都來進行一下判斷,無疑是一種腦殘行為。
下面來看一個我們平時經(jīng)常看到的JS函數(shù),他的作用是判斷瀏覽器類型然后設置對應的透明度屬性:
復制代碼 代碼如下:
function setAlpha(obj,alpha){
if (-[1,]) obj.style.opacity = alpha / 100;
else obj.style.filter = "alpha(opacity=" + alpha + ")";
}
這個函數(shù)有錯嗎?沒有。先判斷瀏覽器是否是標準瀏覽器,如果是,就直接通過opacity設置透明;如果不是,則使用IE濾鏡來實現(xiàn)透明度。
邏輯清晰,代碼簡練,精品??!
不過,沒有錯誤,卻有失誤。
通常,這種設置透明度的函數(shù)都會用來制作淡入淡出效果,也就是說它會被setTimeout一次次的調(diào)用,直到循環(huán)結束。
這時候問題就來了?;氐角懊娴牟砺穯栴},這個函數(shù)就相當于,每次來到路口,都要思考判斷。第1次,來到路口,騷等,我看看,噢,是firefox啊,走第1條路;第2次,又來到這路口,等等,我看看,噢,又是firefox啊,還走第1條路……第3次……第4次。。。。不管多少次,這個函數(shù)都會像最敬業(yè)的交警一樣來查看你的身份————你,不煩嗎?你不煩我都煩了!
這時候,如果你是過路的,你肯定希望這個交警消失。
其實,遇到岔路我們可以這樣:既然已經(jīng)知道只走一條路,那我干脆把另外的路給堵死算了!當然在現(xiàn)實生活中不可能這樣做,不過在代碼里卻不難實現(xiàn),換個思路即可。
javascript有個神奇的地方,就是匿名函數(shù)(通常用來自執(zhí)行),自執(zhí)行函數(shù)的意思是呢,他聲明的時候就執(zhí)行掉了,以后就不會再出現(xiàn)了,你想找都不定能找到!個人覺得,這個性不錯。
看下面的代碼,同樣是設置透明度的函數(shù):
復制代碼 代碼如下:
var setAlpha = (function(obj,alpha){
var set;
if (-[1,]) {
set = function (obj,alpha) {
obj.style.opacity = alpha * 0.01;
}
}
else {
set = function(obj,alpha){
obj.style.filter = "alpha(opacity=" + alpha + ")";
}
}
return set;
})()
也許你要不滿了:這是什么玩意兒啊,好像初學者的水平(被你看穿了。。。)但是!這個卻比前面的版本效率高很多。不信你可以在firefox和ie6下分別alert一下這個函數(shù),就明白了。
通過自執(zhí)行函數(shù),當聲明setAlpha的時候就執(zhí)行了函數(shù),而這個函數(shù)的作用就是,判斷瀏覽器,并確定該使用哪種設置透明度的方法。由于瀏覽器的類型在打開頁面后就不可能再變化,也就是以后都不用再判斷了。就算你調(diào)用10萬次這個函數(shù),他也不會再判斷,而是直接執(zhí)行。
雖然代碼丑,但境界就不同了…
這個例子只是一個小小示范,我只是希望你能明白【一次判斷,而不要次次判斷】的道理,并發(fā)揚光大。減少判斷次數(shù),對js的效率是一個很大的提高。
轉(zhuǎn)自:jo2.org
相關文章
JavaScript屏蔽指定區(qū)域內(nèi)右鍵菜單
有時候需要屏蔽部分區(qū)域內(nèi)的右鍵菜單,下面的代碼大家可以測試下。2010-03-03
使用原生js實現(xiàn)頁面蒙灰(mask)效果示例代碼
像js的框架Extjs的mask()和unmask()功能提供了蒙灰效果,當然jquery也提供了這種蒙灰方法,下面有個示例,大家可以參考下2014-06-06
基于javascript實現(xiàn)的搜索時自動提示功能
這篇文章主要介紹了基于javascript實現(xiàn)的搜索時自動提示功能,非常實用,推薦給需要的小伙伴參考下。2014-12-12
理解 javascript 中的函數(shù)表達式與函數(shù)聲明
這篇文章主要介紹了理解 javascript 中的函數(shù)表達式與函數(shù)聲明,需要的朋友可以參考下2017-07-07

