JavaScript 學習筆記

weixin_34391854發表於2016-04-22

1、進行比較時。儘量使用“===”。而不是使用“==”,由於“==”操作符會為了比較兩個值而進行強制型別轉換,會帶來效能消耗。


2、為了達到遍歷陣列的最佳效能。推薦使用經典的 for 迴圈。
 var list = [1, 2, 3, 4, 5, ...... 100000000];
for(var i = 0, l = list.length; i < l; i++) {
    console.log(list[i]);

上面程式碼有一個處理,就是通過 l = list.length 來快取陣列的長度。
儘管 length 是陣列的一個屬性。可是在每次迴圈中訪問它還是有效能開銷。 可能最新的 JavaScript 引擎在這點上做了優化,可是我們沒法保證自己的程式碼是否執行在這些近期的引擎之上。
實際上,不使用快取陣列長度的方式比快取版本號要慢非常多。


3、使用var array=[] 來宣告陣列。程式碼易讀性更高。降低可能發生的錯誤。


4、隱式的全域性變數
 // 指令碼 A
foo = '42';
// 指令碼 B
var foo = '42' 
上面兩段指令碼效果不同。指令碼 A 在全域性作用域內定義了變數 foo。而指令碼 B 在當前作用域內定義變數 foo。所以宣告變數時都要使用var,防止莫名其妙的bug。


5、JavaScript 中每一個函式內都能訪問一個特別變數 arguments。這個變數維護著全部傳遞到這個函式中的引數列表。注意: 因為 arguments 已經被定義為函式內的一個變數。 因此通過 var keyword定義 arguments 或者將 arguments 宣告為一個形式引數, 都將導致原生的 arguments 不會被建立。arguments 變數不是一個陣列(Array)。 雖然在語法上它有陣列相關的屬性 length,但它不從 Array.prototype 繼承,實際上它是一個物件。


6、
閉包意味著當前作用域總是可以訪問外部作用域中的變數。 由於 函式 是 JavaScript 中唯一擁有自身作用域的結構,因此閉包的建立依賴於函式。它可以模擬私有變數
 function Counter(start) {
    var count = start;
    return {
        increment: function() {
            count++;
        },


        get: function() {
            return count;
        }
    }
}


var foo = Counter(4);
foo.increment();
foo.get(); // 5 
這裡。Counter 函式返回兩個閉包,函式 increment 和函式 get。 這兩個函式都維持著 對外部作用域 Counter 的引用。因此總能夠訪問此作用域內定義的變數 count.


7、為了不使用全域性變數和讓程式模組化,在Javascript中有一種方法:使用匿名包裝器來建立名稱空間
 (function() {
    // 函式建立一個名稱空間
    window.foo = function() {
        // 對外公開的函式,建立了閉包
    };

})(); // 馬上執行此匿名函式 
匿名函式被覺得是 表示式。因此為了可呼叫性,它們首先會被執行。


 ( // 小括號內的函式首先被執行
function() {}
) // 而且返回函式物件
() // 呼叫上面的執行結果。也就是函式物件 


有一些其它的呼叫函式表示式的方法,比方以下的兩種方式語法不同。可是效果一模一樣。


 // 另外兩種方式
+function(){}();
(function(){}()); 


8、絕對不要省略分號,同一時候也提倡將花括號和對應的表示式放在一行, 對於僅僅有一行程式碼的 if 或者 else 表示式,也不應該省略花括號。

這些良好的程式設計習慣不僅能夠提到程式碼的一致性,並且能夠防止解析器改變程式碼行為的錯誤處理。假設程式碼在須要分號的地方沒有寫分號,解析器會自己主動插入分號,有可能會改變程式碼。


9、call是function的內建方法,使用方法:obj1.method1.call(obj2,argument1,argument2) 
如上,call的作用就是把obj1的方法放到obj2上使用。後面的argument1..這些做為引數傳入。apply的作用和call是同樣的,可是apply引數要以陣列的形式傳遞,所以當引數明白時可用call, 當引數不明白時可用apply給合arguments 。如

print.call(window, "背" , "光" , "腳", "本"); 

print.apply(window, arguments); 

相關文章