小編給大家分享一下javascript函數(shù)表達(dá)式怎么用=,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

為東港等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及東港網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、東港網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
函數(shù)表達(dá)式是JavaScript中的一個(gè)既強(qiáng)大又容易令人困惑的特性。
定義函數(shù)的方式有兩種: 一種是函數(shù)聲明,另外一種就是函數(shù)表達(dá)式。
函數(shù)聲明的語(yǔ)法是這樣的。
function functionName(arg0, arg1, arg2) {
//函數(shù)體
}語(yǔ)法:首先是function關(guān)鍵字,然后是函數(shù)的名字,這就是指定函數(shù)名的方式。
Firefox、Safari、Chrome和Opera都給函數(shù)定義了一個(gè)非標(biāo)準(zhǔn)的name屬性,通過(guò)這個(gè)屬性可以訪問(wèn)到給函數(shù)指定的名字。
這個(gè)屬性的值永遠(yuǎn)等于跟在function關(guān)鍵字后面的標(biāo)識(shí)符。
//只在Firefox、Safari、Chrome和Opera有效
function functionName(arg0, arg1, arg2) {
}
console.log(functionName.name); // "functionName"關(guān)于函數(shù)聲明,它的一個(gè)重要特征就是函數(shù)聲明提升(function declaration hoisting),意思是在執(zhí)行代碼之前會(huì)先讀取函數(shù)聲明。這就意味著可以把函數(shù)聲明放在調(diào)用它的語(yǔ)句后面。
sayName(); // "Shaw"
function sayName(){
console.log("Shaw");
}這個(gè)例子不會(huì)拋出錯(cuò)誤,因?yàn)樵诖a執(zhí)行之前會(huì)先讀取函數(shù)聲明
第二種創(chuàng)建函數(shù)的方式是使用函數(shù)表達(dá)式。
函數(shù)表達(dá)式有幾種不同的語(yǔ)法形式。
下面是最常見(jiàn)的一種形式。
var functionName = function(arg0, arg1, arg2) {
//functionBody
};這種形式看起來(lái)好像是常規(guī)的變量賦值語(yǔ)句,即創(chuàng)建一個(gè)函數(shù)并將它賦值給變量functionName。
這種情況下創(chuàng)建的函數(shù)叫做 匿名函數(shù)(anonymous function), 因?yàn)閒unction關(guān)鍵字后面沒(méi)有標(biāo)識(shí)符。
匿名函數(shù)也叫拉姆達(dá)函數(shù)。匿名函數(shù)的name屬性是空字符竄。
函數(shù)表達(dá)式與其他表達(dá)式一樣,在使用前必須先賦值。
sayHi(); // error : sayHi is not a function
var sayHi = function(){
console.log("Hi");
}
// var sayHi //此時(shí)sayHi是undefined
// sayHi() // error : sayHi is not a function
// sayHi = function() { console.log("Hi");}理解函數(shù)提升的關(guān)鍵,就是理解函數(shù)聲明與函數(shù)表達(dá)式之間的區(qū)別。
能夠創(chuàng)建函數(shù)再賦值給變量,也就能夠把函數(shù)作為其他函數(shù)的值返回。
function createComparisonFunction(propertyName) {
return function(object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if(value1 < value2) {
return -1
}else if(value1 > value2) {
return 1;
} else {
return 0;
}
}
}createComparisonFunction()返回了一個(gè)匿名函數(shù)。
返回的函數(shù)可能會(huì)被賦值給一個(gè)變量, 或者以其他方式被調(diào)用。
不過(guò),在createComparisonFunction()函數(shù)內(nèi)部,它是匿名的。
在把函數(shù)當(dāng)成值使用的情況下,都可以使用匿名函數(shù)。
不過(guò),這并不是匿名函數(shù)唯一的用途。
遞歸函數(shù)就是一個(gè)函數(shù)通過(guò)函數(shù)名調(diào)用自身的情況下構(gòu)成的。
function factorial(num) {
if(num <= 1) {
return 1;
} else {
return num * factorial(num-1);
}
}
factorial(4); // 4*3*2*1 = 24
//4* factorial(3) => 4*3*factorial(2) => 4*3*2*factorial(1) => 4*3*2*1 => 24這是一個(gè)經(jīng)典的遞歸階乘函數(shù)。雖然這個(gè)函數(shù)表面看來(lái)沒(méi)什么問(wèn)題,但下面的代碼卻可能導(dǎo)致它出錯(cuò)。
function factorial(num) {
if(num <= 1) {
return 1;
} else {
return num * factorial(num-1);
}
}
var anotherFactorial = factorial;
factorial = null;
//注意這里,其實(shí)函數(shù)factorial指向一個(gè)空對(duì)象。
console.log(anotherFactorial(4)); //Error: anotherFactorial is not a function以上代碼先把factorial()函數(shù)保存在變量anotherFactorial中,然后將factorial變量設(shè)置為null,結(jié)果指向原始函數(shù)的引用只剩下一個(gè)。
但在接下來(lái)調(diào)用anotherFactorial()時(shí),必須執(zhí)行factorial(),而factorial已經(jīng)不是函數(shù), 所以就會(huì)導(dǎo)致錯(cuò)誤。
Google Chrome測(cè)試了上述代碼,是不行的, 建議不用深入了解這部分的內(nèi)容。
在這種情況下,使用arguments.callee可以解決這個(gè)問(wèn)題。
arguments.callee是一個(gè)指向正在執(zhí)行的函數(shù)的指針,因此可以用它來(lái)實(shí)現(xiàn)對(duì)函數(shù)的遞歸調(diào)用。
function factorial(num) {
if(num <= 1) {
return 1;
} else {
return num * arguments.callee(num-1);
}
}“return num * arguments.callee(num-1);” 通過(guò)使用arguments.callee代替函數(shù)名,可以確保無(wú)論怎么調(diào)用函數(shù)都不出問(wèn)題。
因此,在編寫(xiě)遞歸函數(shù)時(shí),使用arguments.callee總比使用函數(shù)名更保險(xiǎn)。
但在嚴(yán)格模式下,不能通過(guò)腳本訪問(wèn)arguments.callee, 訪問(wèn)這個(gè)屬性會(huì)導(dǎo)致錯(cuò)誤。
不過(guò)我們可以使用命名函數(shù)表達(dá)式來(lái)達(dá)成相同的成果。
var factorial = function f(num){
if(num <= 1) {
return 1;
} else {
return num * f(num-1);
}
}
//factorial 指向了函數(shù)f
var anotherFactorial = factorial;
//anotherFactorial 指向了函數(shù)f
factorial = null;
//factorial 指向了一個(gè)空對(duì)象。
anotherFactorial(4); //24
////anotherFactorial 指向了函數(shù)f, 所以還可以正常調(diào)用。看完了這篇文章,相信你對(duì)“javascript函數(shù)表達(dá)式怎么用=”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站標(biāo)題:javascript函數(shù)表達(dá)式怎么用=
路徑分享:http://www.chinadenli.net/article0/geigio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、標(biāo)簽優(yōu)化、軟件開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)