比較運算子
JavaScript提供了許多幾乎只能用在條件陳述句里,其中包括注諸如大于(>),小于(<),大于或等于(>=),小于或等于之類的比較運算子,
如果想比較兩個數值是否相等,可以使用“等于比較運算子”。這個運算子由兩個等號構成(==),別忘了,單個等號(=)是用于完成賦值操作的。如果來條件陳述句的某個條件里使用了單個等號,那么只要相應的賦值操作取得成功,那么條件的求值結果就將是true.
比如:
Var my_mood = “happy”;
Var your_mood = “sad”;
If(my_mood = your_mood){
Arert(“We both feel the same.”);
}
上面這個陳述句的錯誤之處在于,它是吧變數your_mood賦值給變數my_mood,為不是在比較它們是否相等。因為這個賦值操作總會成功,所以這個條件陳述句的結果將永遠是true。
如果想要比較它們的值是否相等,應該:
Var my_mood = “happy”;
Var your_mood = “sad”;
If(my_mood = =your_mood){
Arert(“We both feel the same.”);
}
這次,條件陳述句的結果是false
相等運算子==并不是表示嚴格相等,這一點很容易讓人犯糊涂。例如,比較false與一個空字串會得到什么結果?
Var a = false;
Var b =” ”;
If(a == b){
Alert(“a equals b”);
}
這個條件陳述句的求值結果是true,為什么?因為相等運算子==會認為空字串與fasle的含義相同。要進行嚴格比較,就要使用另一個等號(===)。這個全等運算子會執行嚴格的比較,不僅比較值,而且會比較變數的型別:
Var a = false;
Var b =” ”;
If(a === b){
Alert(“a equals b”);
}
這一次,條件運算式的求值結果就是false。因為即使可以認為false與空字串具有相同的含義,但Boolean和String可不是一種型別。
當然,對于,不等運算子!=也是如此。如果想比較嚴格不相等,就要使用!==。
JavaScript閉包
閉包就是能夠讀取其他函式內部變數的函式。
創建閉包最常見方式,就是在一個函式內部創建另一個函式。

閉包的作用域鏈包含著它自己的作用域,以及包含它的函式的作用域和全域作用域。
閉包的注意事項
通常,函式的作用域及其所有變數都會在函式執行結束后被銷毀。但是,在創建了一個閉包以后,這個函式的作用域就會一直保存到閉包不存在為止。

// 釋放對閉包的參考
a= null;
b= null;
a和 b都是閉包。它們共享相同的函式定義,但是保存了不同的環境。在 a的環境中,x 為 5。而在 b中,x 則為 10。最后通過 null 釋放了 a和 b對閉包的參考。
在javascript中,如果一個物件不再被參考,那么這個物件就會被垃圾回識訓制回收;
如果兩個物件互相參考,而不再被第3者所參考,那么這兩個互相參考的物件也會被回收。
閉包只能取得包含函式中任何變數的最后一個值,這是因為閉包所保存的是整個變數物件,而不是某個特殊的變數。

閉包的應用
任何在函式中定義的變數,都可以認為是私有變數,因為不能在函式外部訪問這些變數。私有變數包括函式的引數、區域變數和函式內定義的其他函式。
把有權訪問私有變數的公有方法稱為特權方法(privileged method)。

模塊模式(The Module Pattern):為單例創建私有變數和方法。
單例(singleton):指的是只有一個實體的物件。JavaScript 一般以物件字面量的方式來創建一個單例物件。

上面是普通模式創建的單例,下面使用模塊模式創建單例:

匿名函式最大的用途是創建閉包,并且還可以構建命名空間,以減少全域變數的使用。從而使用閉包模塊化代碼,減少全域變數的污染。

在這段代碼中函式 addEvent 和 removeEvent 都是區域變數,但我們可以通過全域變數 objEvent 使用它,這就大大減少了全域變數的使用,增強了網頁的安全性。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/88318.html
標籤:JavaScript
上一篇:emoji-picker/emojiarea 插件web頁面顯示問題和PHP存盤問題
下一篇:JavaScript遞回函式
