不同瀏覽器之間存在相容性問題,當一段**需要詢問瀏覽器是否相容時,需要使用if語句,如果是個事件觸發函式,那麼每次呼叫都需要執行一遍if語句,使用惰性載入可以使if語句執行一遍。
原來函式:
function addeven()else if(element.atachevent)
方法一:函式覆蓋;
function addeven()}else if(typeof attachevent=="function")
也就是說,第一次判斷if條件的時候直接將函式的程式覆蓋了,後面直接執行被改變的函式內容,沒有判斷語句了;
方法二:
var addevent=(function();
}else if(element.attachevent);
}) ()
方法二可能有小夥伴看不太懂:(function(){}) ()這種格式是什麼狗東西??,下面講一下:
對於函式的宣告有很多方式,下面看看:
方式一:
function a();
這種宣告,在函式的前後都可以呼叫,因為js直譯器會提前編譯,即使在函式宣告前呼叫也能找到函式;
方式二:
var a=function();
這種是函式表示式,即將函式賦給a,這種函式不能夠在函式宣告前被呼叫,因為js直譯器在遇到這一句的時候才會編譯。
方式三:
var a =function() ();
在函式表示式後面直接加(),瀏覽器會直接把它看作表示式,紅色括號內是形參,綠色括號內是實參,傳入實參直接執行計算出函式的值,把這個值賦給a變數;
例子一:
var a =function(i ) (6);
console.log (a); // 6
例子二:
var a=(function())
();執行粉色括號時,向瀏覽器返回乙個未命名的函式,遇到藍色括號時,立即執行返回的未命名函式,就是說,不加藍色括號的時候,a的值是乙個函式,加了藍色括號後,(function())
() 成為了乙個表示式,所以a是個數; 粉色括號可加可不加;
《JS高階程式設計》之六
1 視窗位置。ie safari opera 和 chrome都提供了screenleft 和 screentop的屬性,firefox 用screenx 和 screeny safari 和 chrome也同時支援這兩個屬性 分別表示視窗相對於螢幕左邊和上邊的位置。在ie opera 和 chro...
一 js高階程式設計之 遞迴
遞迴函式是在乙個函式通過名字呼叫自身情況下夠成的,如 function factorial num else 這是一經典的遞迴階乘函式 表面這個函式是沒有什麼錯的,但在某種情況下會出錯 var anothe ctorial factorial factorial null alert anothe ...
《JS高階程式設計》之二
1 js的基本資料型別有 number string number null undefined boolean 還有一種複雜資料型別object,function 和 array 是object的一種派生型別。2 typeof 用來判斷給定變數的資料型別,undefined 這個值未定義 bool...