標籤:
1. 函數運算式
JavaScript 函數可以通過一個運算式定義。eg. var x = function (a, b) {return a * b};
so: var x = function (a, b) {return a * b};
var z = x(4, 3);
以上函數實際上是一個 匿名函數 (函數沒有名稱)。
函數儲存在變數中,不需要函數名稱,通常通過變數名來調用。
2. 在 JavaScript 中,很多時候,你需要避免使用 new 關鍵字。
3. 函數提升(Hoisting): 實際上是指擴充範圍。定義可在使用之後
4. 自調用函數: 實際上是匿名自我調用的函數
eg.
<script>
(function () {
document.getElementById("demo").innerHTML = "Hello! 我是自己調用的";
})();
</script>
5. 函數是對象:
在 JavaScript 中使用 typeof 操作符判斷函數類型將返回 "function" 。
但,JavaScript 函數描述為一個對象更加準確。
6. JavaScript 函數有個內建的對象: arguments 對象.它包含了函數調用的參數數組。
7. 值傳遞參數:不會修改參數初始值;對象傳遞參數:類似引用,可作用於函數外部。
8. JavaScript中的函數調用還是有點兒說道的:分4種方法進行調用
(1) 作為一個函數直接調用
eg.
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // myFunction(10, 2) 返回 20
此時類似於:
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // window.myFunction(10, 2) 返回 20
原因:以上函數並未指定對象,但屬於整個HTML頁面,所以說屬於全域對象,即屬於瀏覽器中的window對象。
雖然這種函數調用的方式比較常用,但並不是好的編程習慣,會容易造成命名衝突。
當函數沒有被自身的對象調用時, this 的值就會變成全域對象。
(2)將函數作為對象中的方法調用(類似java中的對象)
eg.
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // 返回 "John Doe"
此時,執行個體中 this 的值為 myObject 對象。
(3)使用建構函式調用函數
如果函數調用前使用了 new 關鍵字, 則是調用了建構函式。
建構函式的調用會建立一個新的對象。新對象會繼承建構函式的屬性和方法。
(4)利用apply()和call()方法調用函數
理由:在JavaScript中,函數也是對象,也擁有屬性和方法。也就是說,可以利用函數對象中的apply()方法或者call()方法調用函數對象。
eg.
function myFunction(a, b) {
return a * b;
}
myFunction.call(myObject, 10, 2); // 返回 20
myArray = [10,2];
myFunction.apply(myObject, myArray); // 返回 20
在 JavaScript strict 模式(strict mode)下, 在調用函數時第一個參數會成為 this 的值, 即使該參數不是一個對象。
在 JavaScript 非strict 模式(non-strict mode)下, 如果第一個參數的值是 null 或 undefined, 它將使用全域對象替代。
9. 在JavaScript中,若變數在聲明時沒有var關鍵字,則為全域變數
10. JavaScript 閉包 (??)
Basic knowledge of javaScript (keep for myself)