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

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

百恒網絡

南昌百恒網絡

函數內部屬性結合實例介紹

百恒網絡 2012-09-05 4909

在函數內部,有兩個特殊的對象:arguments和this。其中,arguments在曾經介紹過,它是一個類數組對象,包含著傳入函數中的所有參數。雖然arguments的主要用途是保存函數參數,但這個對象還有一個名叫callee的屬性,該屬性是一個指針,指向擁有這個arguments對象的函數。

請看下面這個非常經輿的階乘函數:

function factorial (num){

if (num<=1){

return 1:

}else{

return num * factorial(num-l)

}

}

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

function factorial (num)(

if (num<=1){

return 1:}

else{

return num * arguments.callee (num-l)

}

}

在這個重寫后的factorial()函數的函數體內,沒有再引用函數名factorial。這樣,無論引用函數時使用的是什么名字,都可以保證正常完成遞歸調用。例如:

var trueFactorial= factorial;

factorial= function()(

return 0:

);

alert(trueFactorial(5))j //120

alert(factorial (5)); //0

茌此,變量trueFactorial獲得了factorial的值,實際上是在另一個位置上保存了一個函數的指針。然后,我們又將一個簡單地返回0的函數賦值給factorial變量。如果像原來的factorial()那樣不使用arguments.callee,調用trueFactorial()就會返回0??墒?,在解除了函數體內的代碼與函數名的耦合狀態(tài)之后,trueFactorial()仍然能夠正常地計算階乘;至于factorial(),它現在只是一個返回0的函數。

函數內部的另一個特殊對象是this,其行為與Java和C#中的this大致類似。換句話說,this引用的是函數據以執(zhí)行操作的對象——或者也可以說,this是函數在執(zhí)行時所處的作用域(當在網頁的全局作用域中調用函數時,this對象引用的就是window)。來看下面的例子:

windndow. color = "red";

var o = { color: "blue" };

function sayColor(){

alert(this.color);

}

sayColor(); //"red"

o.sayColor=sayColor;

o.sayColor(); //"blue"

上面這個函數sayColor()是在全局作用域中定義的,它引用了this對象。由于在調用函數之前,this的值并不確定,因此this可能會在代碼執(zhí)行過程中引用不同的對象。當在全局作用域中調用sayColor()時,this引用的是全局對象window;換句話說,對this.color求值會轉換成對window.color求值,于是結果就返回了"red"。而當把這個函數賦給對象o并調用o.sayColor()時,this引用的是對象o,因此對this.color隸值會轉換成對o.color求值,結果就返回了"blue"。

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

希望對廣大站長或網站建設公司或從事企業(yè)網站建設的團隊有所幫助,如對此不太理解的,可以與南昌網絡公司百恒網絡技術部聯系。我們很高與廣大站長和網站建設公司技術人員分享我們的技術和經驗。


400-680-9298,0791-88117053
掃一掃關注百恒網絡微信公眾號
掃一掃打開百恒網絡小程序

歡迎您的光顧,我們將竭誠為您服務×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務 售后服務
 
售后服務 售后服務
 
備案專線 備案專線
 
×
湖州市| 洮南市| 平和县| 霍山县| 景德镇市| 永丰县| 富源县| 雷州市| 翼城县| 固阳县| 芦山县| 北宁市| 宜宾市| 新密市| 普定县| 神农架林区| 绥滨县| 桐乡市| 夏邑县| 平湖市| 谷城县| 佛山市| 衡山县| 天长市| 达孜县| 浏阳市| 荆门市| 怀化市| 枞阳县| 闽清县| 五莲县| 视频| 封开县| 澄江县| 新津县| 南澳县| 光山县| 长沙县| 长春市| 三亚市| 壤塘县|