JavaScript Function函數(shù)類(lèi)型介紹
來(lái)源:易賢網(wǎng) 閱讀:739 次 日期:2015-04-09 16:36:45
溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript Function函數(shù)類(lèi)型介紹”,方便廣大網(wǎng)友查閱!

// 在JS中,Function(函數(shù))類(lèi)型實(shí)際上是對(duì)象;每個(gè)函數(shù)都是Function類(lèi)型的實(shí)例;而且都與其他引用類(lèi)型一樣具有屬性和方法;

// 由于函數(shù)是對(duì)象,因此函數(shù)名實(shí)際上也是一個(gè)指向函數(shù)對(duì)象的指針;

一 函數(shù)的聲明方式

1.函數(shù)聲明方式

function box(num1,num2){

return num1+num2;

}

2.函數(shù)表達(dá)式定義函數(shù)

var box = function(num1,num2){// 通過(guò)變量box即可引用函數(shù);

return num1+num2;

};// 注意函數(shù)末尾有一個(gè)分號(hào),就像聲明其他變量時(shí)一樣;

var another = box; // 使用不帶圓括號(hào)的函數(shù)名是訪問(wèn)函數(shù)指針;而非調(diào)用函數(shù);

console.log(another(10,10));

3.使用Function構(gòu)造函數(shù)

var box = new Function('num1','num2','return num1+num2');

// 第三種方式不推薦,這種語(yǔ)法會(huì)導(dǎo)致解析兩次代碼(第一次解析常規(guī)JS代碼,第二次解析傳入構(gòu)造函數(shù)中的字符串),從而影響性能;

// 可以通過(guò)這種語(yǔ)法來(lái)理解"函數(shù)是對(duì)象,函數(shù)名是指針"的概念;

二 作為值的函數(shù)

// JS中的函數(shù)名本身就是變量,所以函數(shù)也可以作為值來(lái)使用;

// 也就是說(shuō),不僅可以像傳參數(shù)一樣把一個(gè)函數(shù)傳遞給另一個(gè)函數(shù),而且可以將一個(gè)函數(shù)作為另一個(gè)函數(shù)的結(jié)果返回;

function box(sumFunction,num){// 無(wú)論第一個(gè)參數(shù)傳遞進(jìn)來(lái)的是什么函數(shù),

return sumFunction(num); // 它都會(huì)返回執(zhí)行第一參數(shù)后的結(jié)果;

}

function sum(num){

return num+10;

}

// 傳遞函數(shù)到另一個(gè)函數(shù)里;

// 要訪問(wèn)函數(shù)的指針不執(zhí)行函數(shù)的話,須去掉函數(shù)名后的圓括號(hào);

var result = box(sum,10); // =>20;

三 函數(shù)內(nèi)部屬性

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

// 1.arguments:是一個(gè)類(lèi)數(shù)組對(duì)象,包含著傳入函數(shù)中的所有參數(shù),主要用途是保存函數(shù)參數(shù);

// arguments這個(gè)對(duì)象還有一個(gè)名叫callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù);

function box(num){

if(num<=1){

return 1;

}else{

return num*arguments.callee(num-1); // 使用arguments.callee來(lái)執(zhí)行box本身;

}

}

// 2.this:引用的是函數(shù)據(jù)以操作的對(duì)象,或者說(shuō)函數(shù)調(diào)用語(yǔ)句所處的作用域;

// 當(dāng)在全局作用域調(diào)用函數(shù)時(shí),this對(duì)象引用的就是window;

window.color = "red";

alert(this.color); // 打印全局的color;=>red;

var box = {

color:'blue',

sayColor:function(){

alert(this.color); // 打印局部的color;=>blue;

}

};

四 函數(shù)屬性和方法

// JS中的函數(shù)是對(duì)象,因此函數(shù)也有屬性和方法;包含length和prototype;

// length屬性:表示函數(shù)希望接收到命名參數(shù)的個(gè)數(shù);

function box(name,age){

alert(name+age);

}

alert(box.length); // 2s

// prototype屬性:它是保存所有實(shí)例方法的真正所在,也就是原型;

// prototype包含兩個(gè)方法:apply()和call(),每個(gè)函數(shù)都包含這兩個(gè)非繼承而來(lái)的方法;

// 這兩個(gè)方法的用途都在特定的作用域中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值;

var color = 'red';

var box = {

color = 'blue';

}

function sayColor({

alert(this.color);

});

sayColor(); // 作用域在window;

sayColor.call(this); // 作用域在window;

sayColor.call(window); // 作用域在window;

sayColor.call(box); // 作用域在box,對(duì)象冒充;=>red;

// 使用call(box)方法的時(shí)候,sayColor()方法的運(yùn)行環(huán)境已經(jīng)變成了box對(duì)象里了;

// 使用call()或apply()來(lái)擴(kuò)充作用域的最大好處,就是對(duì)象不需要與方法發(fā)生任何耦合關(guān)系;

// 耦合:相互關(guān)聯(lián)的意思,擴(kuò)展和維護(hù)會(huì)發(fā)生連鎖反應(yīng);

// 也就是說(shuō),box對(duì)象和sayColor()方法之間不會(huì)有多余的關(guān)聯(lián)操作,比如:box.sayColor = sayColor;

function Animal(){

this.name = "Animal";

this.showName = function(){

alert(this.name);

}

}

function Cat(){

this.name = "Cat";

}

var animal = new Animal();

var cat = new Cat();

//通過(guò)call或apply方法,將原本屬于Animal對(duì)象的showName()方法交給對(duì)象cat來(lái)使用。

//輸入結(jié)果為"Cat"

animal.showName.call(cat,",");

//animal.showName.apply(cat,[]);

五 小結(jié)

1 // 函數(shù)實(shí)際上是Function類(lèi)型的實(shí)例,因此函數(shù)也是對(duì)象;而這一點(diǎn)正式JavaScript最有特色的地方;

2 // 由于函數(shù)對(duì)象,所以函數(shù)也擁有方法,可以用來(lái)增強(qiáng)其行為;

更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:JavaScript Function函數(shù)類(lèi)型介紹
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類(lèi)型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專(zhuān)用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)