JavaScript 學習筆記

來源:互聯網
上載者:User

JavaScript 學習筆記

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 關鍵字定義 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);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.