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

函數表達式是JavaScript中的一個既強大又容易令人困惑的特性。
定義函數的方式有兩種: 一種是函數聲明,另外一種就是函數表達式。
函數聲明的語法是這樣的。
function functionName(arg0, arg1, arg2) {
//函數體
}語法:首先是function關鍵字,然后是函數的名字,這就是指定函數名的方式。
Firefox、Safari、Chrome和Opera都給函數定義了一個非標準的name屬性,通過這個屬性可以訪問到給函數指定的名字。
這個屬性的值永遠等于跟在function關鍵字后面的標識符。
//只在Firefox、Safari、Chrome和Opera有效
function functionName(arg0, arg1, arg2) {
}
console.log(functionName.name); // "functionName"關于函數聲明,它的一個重要特征就是函數聲明提升(function declaration hoisting),意思是在執行代碼之前會先讀取函數聲明。這就意味著可以把函數聲明放在調用它的語句后面。
sayName(); // "Shaw"
function sayName(){
console.log("Shaw");
}這個例子不會拋出錯誤,因為在代碼執行之前會先讀取函數聲明
第二種創建函數的方式是使用函數表達式。
函數表達式有幾種不同的語法形式。
下面是最常見的一種形式。
var functionName = function(arg0, arg1, arg2) {
//functionBody
};這種形式看起來好像是常規的變量賦值語句,即創建一個函數并將它賦值給變量functionName。
這種情況下創建的函數叫做匿名函數(anonymous function), 因為function關鍵字后面沒有標識符。
匿名函數也叫拉姆達函數。匿名函數的name屬性是空字符竄。
函數表達式與其他表達式一樣,在使用前必須先賦值。
sayHi(); // error : sayHi is not a function
var sayHi = function(){
console.log("Hi");
}
// var sayHi //此時sayHi是undefined
// sayHi() // error : sayHi is not a function
// sayHi = function() { console.log("Hi");}理解函數提升的關鍵,就是理解函數聲明與函數表達式之間的區別。
能夠創建函數再賦值給變量,也就能夠把函數作為其他函數的值返回。
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()返回了一個匿名函數。
返回的函數可能會被賦值給一個變量, 或者以其他方式被調用。
不過,在createComparisonFunction()函數內部,它是匿名的。
在把函數當成值使用的情況下,都可以使用匿名函數。
不過,這并不是匿名函數唯一的用途。
遞歸函數就是一個函數通過函數名調用自身的情況下構成的。
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這是一個經典的遞歸階乘函數。雖然這個函數表面看來沒什么問題,但下面的代碼卻可能導致它出錯。
function factorial(num) {
if(num <= 1) {
return 1;
} else {
return num * factorial(num-1);
}
}
var anotherFactorial = factorial;
factorial = null;
//注意這里,其實函數factorial指向一個空對象。
console.log(anotherFactorial(4)); //Error: anotherFactorial is not a function以上代碼先把factorial()函數保存在變量anotherFactorial中,然后將factorial變量設置為null,結果指向原始函數的引用只剩下一個。
但在接下來調用anotherFactorial()時,必須執行factorial(),而factorial已經不是函數, 所以就會導致錯誤。
Google Chrome測試了上述代碼,是不行的, 建議不用深入了解這部分的內容。
在這種情況下,使用arguments.callee可以解決這個問題。
arguments.callee是一個指向正在執行的函數的指針,因此可以用它來實現對函數的遞歸調用。
function factorial(num) {
if(num <= 1) {
return 1;
} else {
return num * arguments.callee(num-1);
}
}“return num * arguments.callee(num-1);” 通過使用arguments.callee代替函數名,可以確保無論怎么調用函數都不出問題。
因此,在編寫遞歸函數時,使用arguments.callee總比使用函數名更保險。
但在嚴格模式下,不能通過腳本訪問arguments.callee, 訪問這個屬性會導致錯誤。
不過我們可以使用命名函數表達式來達成相同的成果。
var factorial = function f(num){
if(num <= 1) {
return 1;
} else {
return num * f(num-1);
}
}
//factorial 指向了函數f
var anotherFactorial = factorial;
//anotherFactorial 指向了函數f
factorial = null;
//factorial 指向了一個空對象。
anotherFactorial(4); //24
////anotherFactorial 指向了函數f, 所以還可以正常調用。看完了這篇文章,相信你對“javascript函數表達式怎么用=”有了一定的了解,如果想了解更多相關知識,歡迎關注創新互聯網站制作公司行業資訊頻道,感謝各位的閱讀!
當前名稱:javascript函數表達式怎么用=-創新互聯
地址分享:http://www.yijiale78.com/article42/idhec.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、App開發、微信公眾號、ChatGPT、網站制作、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯