有 3 種定義函式的方式
- 函式宣告
- 函式運算式
- Function 建構式(很少使用)
函式宣告
function 關鍵字后需要指定函式名
function sum(num1, num2) {
return num1 + num2;
} // 不加分號
console.log(sum(2, 3)); // 5
函式運算式
function 關鍵字后不用指定函式名;函式末尾需要添加一個分號,就像宣告其他變數時一樣
var sum = function (num1, num2) {
return num1 + num2;
}; // 加分號
console.log(sum(2, 3)); // 5
Function 建構式
Function 建構式可以接收任意數量的引數,但最后一個引數始終都被看成是函式體,而前面的引數則列舉出了新函式的引數,
var sum = new Function('num1', 'num2', 'return num1 + num2'); // 不推薦
console.log(sum(2, 3)); // 5
函式宣告與函式運算式
??函式宣告 與 函式運算式 是有區別的,執行代碼時,決議器會率先讀取函式宣告,并使其在執行任何代碼之前可用(可以訪問);至于函式運算式,則必須等到決議器執行到它所在的代碼行,才會真正被解釋執行,
??同時說明:函式宣告會被提升;函式宣告要早于變數宣告被決議器讀取;
// 函式宣告提升
console.log(sum(2, 3)); // 5 (函式宣告被提升到源代碼樹頂部)
function sum(sum1, sum2) {
return sum1 + sum2;
}
如果把上面的函式宣告改為等價的函式運算式,執行將報錯:
console.log(sum(2, 3)); // TypeError: sum is not a function
var sum = function (sum1, sum2) {
return sum1 + sum2;
}
關于ECMAScript中的函式
- 函式實際是物件,每個函式都是
Function型別的實體,而且都與其他參考型別一樣具有屬性和方法, - 由于函式是物件,因此 函式名實際上也是一個指向函式物件的指標,不會與某個函式系結,即:函式是物件,函式名是指標
- 因為函式名本身就是變數,所以函式也可以作為值來使用,也就是說,不僅可以像傳遞引數一樣把函式傳遞給另一個函式,而且可以將一個函式作為另一個函式的結果回傳,
- 要訪問函式的指標而不執行函式的話,必須去掉函式名后面的那對大括號,
- 沒有多載,后面的函式會覆寫前面的同名函式,
- 每個函式都包含兩個非繼承而來的方法:apply() 和 call(),用途都是在特定的作用域中呼叫函式,即設定函式體內 this 物件的值,
function sum(num1, num2) {
return num1 + num2;
}
console.log(sum(2, 3)); // 5
var anotherSum = sum; // 使用 不帶圓括號 的函式名是訪問函式指標,而非呼叫函式
console.log(anotherSum(2, 3)); // 5
// 以下為關鍵代碼
sum = null;
console.log(anotherSum(2, 3)); // 5
可以結合以下例子理解
var obj1 = new Object();
var obj2 = obj1;
obj1.name = 'Nicholas';
console.log(obj2.name); // Nicholas
obj1 = null;
console.log(obj2.name); // Nicholas
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/123524.html
標籤:JavaScript
下一篇:小學四則運算生成器
