有 3 種定義函數(shù)的方式
function
關(guān)鍵字后需要指定函數(shù)名
function sum(num1, num2) {
return num1 + num2;
} // 不加分號(hào)
console.log(sum(2, 3)); // 5
function
關(guān)鍵字后不用指定函數(shù)名;函數(shù)末尾需要添加一個(gè)分號(hào),就像聲明其他變量時(shí)一樣
var sum = function (num1, num2) {
return num1 + num2;
}; // 加分號(hào)
console.log(sum(2, 3)); // 5
Function
構(gòu)造函數(shù)可以接收任意數(shù)量的參數(shù),但最后一個(gè)參數(shù)始終都被看成是函數(shù)體,而前面的參數(shù)則枚舉出了新函數(shù)的參數(shù)。
var sum = new Function('num1', 'num2', 'return num1 + num2'); // 不推薦
console.log(sum(2, 3)); // 5
??函數(shù)聲明 與 函數(shù)表達(dá)式 是有區(qū)別的。執(zhí)行代碼時(shí),解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可用(可以訪問);至于函數(shù)表達(dá)式,則必須等到解析器執(zhí)行到它所在的代碼行,才會(huì)真正被解釋執(zhí)行。
??同時(shí)說(shuō)明:函數(shù)聲明會(huì)被提升;函數(shù)聲明要早于變量聲明被解析器讀取;
// 函數(shù)聲明提升
console.log(sum(2, 3)); // 5 (函數(shù)聲明被提升到源代碼樹頂部)
function sum(sum1, sum2) {
return sum1 + sum2;
}
如果把上面的函數(shù)聲明改為等價(jià)的函數(shù)表達(dá)式,執(zhí)行將報(bào)錯(cuò):
console.log(sum(2, 3)); // TypeError: sum is not a function
var sum = function (sum1, sum2) {
return sum1 + sum2;
}
Function
類型的實(shí)例,而且都與其他引用類型一樣具有屬性和方法。function sum(num1, num2) {
return num1 + num2;
}
console.log(sum(2, 3)); // 5
var anotherSum = sum; // 使用 不帶圓括號(hào) 的函數(shù)名是訪問函數(shù)指針,而非調(diào)用函數(shù)
console.log(anotherSum(2, 3)); // 5
// 以下為關(guān)鍵代碼
sum = null;
console.log(anotherSum(2, 3)); // 5
可以結(jié)合以下例子理解
var obj1 = new Object();
var obj2 = obj1;
obj1.name = 'Nicholas';
console.log(obj2.name); // Nicholas
obj1 = null;
console.log(obj2.name); // Nicholas
聯(lián)系客服