函式的宣告和表示式
阿新 • • 發佈:2019-01-10
//解析器在向執行環境中載入資料時,對函式宣告和函式表示式並非一視同仁。解析器會率先讀取函式宣告,並使其在執行
//任何程式碼之前可用(可以訪問);至於函式表示式,則必須等到解析器執行到它所在的程式碼行,才會真
//正被解釋執行。
//下列可以被正常執行 因為:因為在程式碼開始執行之前,解析器就已經通過一個名為函式宣告提升
//的過程,讀取並將函式宣告新增到執行環境中。
alert(sum(10,10));
function sum(num1, num2){
return num1 + num2;
}
//產生錯誤 只有函式宣告才會被提升,而表示式不會
alert(sum(10,10));
var sum = function(num1, num2){
return num1 + num2;
};
//因為ECMAScript中的函式名本身就是變數,所以函式也可以作為值來使用。也就是說,不僅可以
//像傳遞引數一樣把一個函式傳遞給另一個函式,而且可以將一個函式作為另一個函式的結果返回
//有兩個特殊的物件:arguments和this雖然arguments的主要用途是儲存函式引數,但這個物件還有 //一個名叫callee的屬性,該屬性是一個指標,指向擁有這個arguments物件的函式
function factorial(num){
if (num <=1) {
return 1;
} else {
return num * factorial(num-1)
}
}
function factorial(num){
if (num <=1) {
return 1;
} else {
return num * arguments.callee(num-1)
}
}