1. 程式人生 > 實用技巧 >JS的一些資料型別的方法和函式(四)

JS的一些資料型別的方法和函式(四)

今天來記錄關於Function型別的一些方法和功能。

Fuction 型別

我們知道,在ES中,函式實際上是物件。每一個函式都是Function型別的例項,而且與其他引用型別一樣都具有屬性和方法。由於函式是物件,因此函式名實際上也是一個指向函式物件的指標,不會與某個函式繫結.

函式的基本宣告方式如下

function sum(a,b){
    return a+b;
}
let sum2=function(a,b){
    return a+b;
};

這兩種定義函式的方法基本上是相差無幾的。

注意看第二個宣告方法,它是通過變數sum便可以訪問。

由於函式名僅僅是指向函式的指標,因此一個函式可以有多個不同的函式名。

function sum(a,b){
    return a+b;
}
console.log(sum(10,10)) // 20
let anySum=sum;
console.log(anySum(10,10)) // 20
sum=null;
console.log(anySum(10,10)) // 20

這裡我們就算讓sum=null也不會影響anySum的正常使用。

1.沒有過載

ES裡的函式沒有過載的概念。

我們看一下程式碼

function sub(a,b){
    return a-b;
}
function sub(a,b){
    return a-b+100;
}
console.log(sub(
20,10)); //110

顯然,這個例子中聲明瞭兩個同名的函式,而結果則是後面的函式覆蓋了前面的函式。上面的程式碼與下面的程式碼沒有區別

var sub=function(a,b){
    return a-b;
}
sub=function(a,b){
    return a-b+100;
}
console.log(sub(20,10)) // 110

2.函式宣告和函式表示式

雖然函式宣告和函式表示式在看起來是沒有什麼區別的,然而,解析器在向執行環境中載入資料是,對他們兩個的處理是不一樣的。解析器會率先讀取函式宣告,並使其在執行任何程式碼之前可用;而函式表示式需要等到解析器執行到他所在的程式碼行時才會真正被解釋執行。看下面的程式碼。

console.log(A(10,10)) // 100
function A(a,b){
    return a*b;
}

console.log(B(10,10)) //  Uncaught ReferenceError: B is not defined
let b =function(a,b){
    return a*b;
}

從這兩個程式碼執行結果中就可以看到他們有什麼不同了。