JavaScript中的Function類(lèi)

每個(gè)函數(shù)都是Function類(lèi)型的實(shí)例

三種創(chuàng)建函數(shù)的方法:

// 方法一
function sum(num1, num2) {
  return num1+num2;
}

//方法二
var sum = function(num1, num2) {
  return num1+num2;
};

//方法三
var sum = new Function(“num1”, “num2”, “return num1+num2;”);

最好不用方法三去創(chuàng)建函數(shù),但是方法三可以更清晰的看到,函數(shù)就是一個(gè)對(duì)象,通過(guò)new實(shí)例化得到。而函數(shù)名就是一個(gè)保存此對(duì)象的引用。

也正是因?yàn)楹瘮?shù)名就是一個(gè)特殊的變量,所以,在JavaScript中,沒(méi)有函數(shù)重載這一說(shuō),有的只是覆蓋。

函數(shù)聲明提升:函數(shù)的聲明可以提升到作用域的頂層,從而在函數(shù)創(chuàng)建之前調(diào)用函數(shù)也不回導(dǎo)致錯(cuò)誤:

alert(sum(1, 2));
function sum(a, b) { return a + b }

上面說(shuō)到函數(shù)其實(shí)就是一個(gè)特殊的變量,所以作為一個(gè)值的函數(shù)有以下作用:

  1. 函數(shù)作為另一個(gè)函數(shù)的參數(shù)。
  2. 函數(shù)作為另一個(gè)函數(shù)的返回值

在函數(shù)內(nèi)部有兩個(gè)特殊的對(duì)象:arguments, this 。

arguments:arguments是一個(gè)類(lèi)數(shù)組對(duì)象,里面保存著調(diào)用函數(shù)時(shí)傳入函數(shù)的參數(shù)
arguments有一個(gè)叫callee的屬性,arguments.callee保存著這個(gè)函數(shù)的引用。

this:this引用的是函數(shù)執(zhí)行的環(huán)境對(duì)象。

函數(shù)作為對(duì)象本身有兩個(gè)對(duì)象:length, prototype 。

length:length屬性是聲明函數(shù)時(shí)參數(shù)的個(gè)數(shù)。

prototype:prototype里面保存著Function類(lèi)的實(shí)例方法。

函數(shù)作為對(duì)象有三個(gè)方法:call(), apply(), bind() 。

三個(gè)方法的作用都是改變函數(shù)內(nèi)部的this對(duì)象的引用。

apply():apply方法的第一個(gè)參數(shù)是一個(gè)對(duì)象,用來(lái)替代調(diào)用該方法的函數(shù)的this,第二個(gè)是一個(gè)數(shù)組,保存著函數(shù)的參數(shù)。

call():call方法的第一個(gè)參數(shù)的作用與call相同,不同的是,后面的參數(shù)可以是多個(gè),每一個(gè)都是函數(shù)的參數(shù)。

bind():bind方法也可以修改作用域,但不同的時(shí),此方法會(huì)返回一個(gè)新的函數(shù),這個(gè)新的函數(shù)中的this會(huì)是bind方法中傳入的參數(shù)對(duì)象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容