干熟妇在线视频午夜剧场一级A级|99成人香视频日本两性激情视频|久久 午夜福利无码精品人妻一区|热久久超碰精品精品少妇一区二区|五月天综合在线国产一区免费视频|亚洲成人中心热re久久99|亚洲国产怡红院丁香五月综合h|玖玖九久久久午夜射精视频

十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開(kāi)發(fā)_APP開(kāi)發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號(hào) 掃一掃關(guān)注
小程序
tel-icon全國(guó)服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開(kāi)百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

函數(shù)內(nèi)部屬性結(jié)合實(shí)例介紹

百恒網(wǎng)絡(luò) 2012-09-05 5031

在函數(shù)內(nèi)部,有兩個(gè)特殊的對(duì)象:arguments和this。其中,arguments在曾經(jīng)介紹過(guò),它是一個(gè)類數(shù)組對(duì)象,包含著傳入函數(shù)中的所有參數(shù)。雖然arguments的主要用途是保存函數(shù)參數(shù),但這個(gè)對(duì)象還有一個(gè)名叫callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)。

請(qǐng)看下面這個(gè)非常經(jīng)輿的階乘函數(shù):

function factorial (num){

if (num<=1){

return 1:

}else{

return num * factorial(num-l)

}

}

南昌網(wǎng)站優(yōu)化公司技術(shù)員認(rèn)為定義階乘函數(shù)一般都要用到遞歸算法;如上面的代碼所示,在函數(shù)有名字,而且名字以后也不會(huì)變的情況下,這樣定義沒(méi)有問(wèn)題。但問(wèn)題是這個(gè)函數(shù)的執(zhí)行與函數(shù)名factorial緊緊耦合在了一起。為了消除這種緊密耦合的現(xiàn)象,可以像下面這樣使用argumnents.callee:

function factorial (num)(

if (num<=1){

return 1:}

else{

return num * arguments.callee (num-l)

}

}

在這個(gè)重寫(xiě)后的factorial()函數(shù)的函數(shù)體內(nèi),沒(méi)有再引用函數(shù)名factorial。這樣,無(wú)論引用函數(shù)時(shí)使用的是什么名字,都可以保證正常完成遞歸調(diào)用。例如:

var trueFactorial= factorial;

factorial= function()(

return 0:

);

alert(trueFactorial(5))j //120

alert(factorial (5)); //0

茌此,變量trueFactorial獲得了factorial的值,實(shí)際上是在另一個(gè)位置上保存了一個(gè)函數(shù)的指針。然后,我們又將一個(gè)簡(jiǎn)單地返回0的函數(shù)賦值給factorial變量。如果像原來(lái)的factorial()那樣不使用arguments.callee,調(diào)用trueFactorial()就會(huì)返回0??墒牵诮獬撕瘮?shù)體內(nèi)的代碼與函數(shù)名的耦合狀態(tài)之后,trueFactorial()仍然能夠正常地計(jì)算階乘;至于factorial(),它現(xiàn)在只是一個(gè)返回0的函數(shù)。

函數(shù)內(nèi)部的另一個(gè)特殊對(duì)象是this,其行為與Java和C#中的this大致類似。換句話說(shuō),this引用的是函數(shù)據(jù)以執(zhí)行操作的對(duì)象——或者也可以說(shuō),this是函數(shù)在執(zhí)行時(shí)所處的作用域(當(dāng)在網(wǎng)頁(yè)的全局作用域中調(diào)用函數(shù)時(shí),this對(duì)象引用的就是window)。來(lái)看下面的例子:

windndow. color = "red";

var o = { color: "blue" };

function sayColor(){

alert(this.color);

}

sayColor(); //"red"

o.sayColor=sayColor;

o.sayColor(); //"blue"

上面這個(gè)函數(shù)sayColor()是在全局作用域中定義的,它引用了this對(duì)象。由于在調(diào)用函數(shù)之前,this的值并不確定,因此this可能會(huì)在代碼執(zhí)行過(guò)程中引用不同的對(duì)象。當(dāng)在全局作用域中調(diào)用sayColor()時(shí),this引用的是全局對(duì)象window;換句話說(shuō),對(duì)this.color求值會(huì)轉(zhuǎn)換成對(duì)window.color求值,于是結(jié)果就返回了"red"。而當(dāng)把這個(gè)函數(shù)賦給對(duì)象o并調(diào)用o.sayColor()時(shí),this引用的是對(duì)象o,因此對(duì)this.color隸值會(huì)轉(zhuǎn)換成對(duì)o.color求值,結(jié)果就返回了"blue"。

南昌網(wǎng)站建設(shè)公司工程師提示,讀者一定要牢記函數(shù)的名字僅僅是一個(gè)包含指針的變量而已,因此,即是在不同的環(huán)境中執(zhí)行,全局的sayColor()函數(shù)與o.sayColor()指向的仍然是同一個(gè)函數(shù)。

希望對(duì)廣大站長(zhǎng)或網(wǎng)站建設(shè)公司或從事企業(yè)網(wǎng)站建設(shè)的團(tuán)隊(duì)有所幫助,如對(duì)此不太理解的,可以與南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)技術(shù)部聯(lián)系。我們很高與廣大站長(zhǎng)和網(wǎng)站建設(shè)公司技術(shù)人員分享我們的技術(shù)和經(jīng)驗(yàn)。


400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開(kāi)百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠(chéng)為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×
临洮县| 清原| 通海县| 阿瓦提县| 荔波县| 香河县| 贡山| 若羌县| 永宁县| 南投县| 唐山市| 吐鲁番市| 娄烦县| 安塞县| 曲周县| 闽清县| 府谷县| 巨野县| 新河县| 龙海市| 盐山县| 定结县| 汉沽区| 太仓市| 鹤岗市| 荥阳市| 高要市| 南投县| 儋州市| 绵竹市| 德阳市| 德州市| 沁源县| 策勒县| 托克逊县| 栾川县| 马关县| 门源| 舒兰市| 柘荣县| 黄冈市|