javascript函數(shù)表達式怎么用=-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計制作的公司,為廣大用戶提供了成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,成都網(wǎng)站設(shè)計,廣告投放平臺,成都做網(wǎng)站選創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。

函數(shù)表達式是JavaScript中的一個既強大又容易令人困惑的特性。

定義函數(shù)的方式有兩種: 一種是函數(shù)聲明,另外一種就是函數(shù)表達式。

函數(shù)聲明的語法是這樣的。

function functionName(arg0, arg1, arg2) {
    //函數(shù)體
}

語法:首先是function關(guān)鍵字,然后是函數(shù)的名字,這就是指定函數(shù)名的方式。

Firefox、Safari、Chrome和Opera都給函數(shù)定義了一個非標準的name屬性,通過這個屬性可以訪問到給函數(shù)指定的名字。
這個屬性的值永遠等于跟在function關(guān)鍵字后面的標識符。

//只在Firefox、Safari、Chrome和Opera有效
function functionName(arg0, arg1, arg2) {
}
console.log(functionName.name); // "functionName"

關(guān)于函數(shù)聲明,它的一個重要特征就是函數(shù)聲明提升(function declaration hoisting),意思是在執(zhí)行代碼之前會先讀取函數(shù)聲明。這就意味著可以把函數(shù)聲明放在調(diào)用它的語句后面。

sayName(); // "Shaw"
function sayName(){
    console.log("Shaw");
}

這個例子不會拋出錯誤,因為在代碼執(zhí)行之前會先讀取函數(shù)聲明

第二種創(chuàng)建函數(shù)的方式是使用函數(shù)表達式。

函數(shù)表達式有幾種不同的語法形式。
下面是最常見的一種形式。

var functionName =  function(arg0, arg1, arg2) {
    //functionBody
};

這種形式看起來好像是常規(guī)的變量賦值語句,即創(chuàng)建一個函數(shù)并將它賦值給變量functionName。

這種情況下創(chuàng)建的函數(shù)叫做匿名函數(shù)(anonymous function), 因為function關(guān)鍵字后面沒有標識符。
匿名函數(shù)也叫拉姆達函數(shù)。匿名函數(shù)的name屬性是空字符竄。

函數(shù)表達式與其他表達式一樣,在使用前必須先賦值。

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");}

理解函數(shù)提升的關(guān)鍵,就是理解函數(shù)聲明與函數(shù)表達式之間的區(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()返回了一個匿名函數(shù)。
返回的函數(shù)可能會被賦值給一個變量, 或者以其他方式被調(diào)用。
不過,在createComparisonFunction()函數(shù)內(nèi)部,它是匿名的。
在把函數(shù)當成值使用的情況下,都可以使用匿名函數(shù)。
不過,這并不是匿名函數(shù)唯一的用途。

遞歸

遞歸函數(shù)就是一個函數(shù)通過函數(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

這是一個經(jīng)典的遞歸階乘函數(shù)。雖然這個函數(shù)表面看來沒什么問題,但下面的代碼卻可能導致它出錯。

function factorial(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num * factorial(num-1);
    }
}
var anotherFactorial = factorial;
factorial = null;
//注意這里,其實函數(shù)factorial指向一個空對象。
console.log(anotherFactorial(4));  //Error: anotherFactorial is not a function

以上代碼先把factorial()函數(shù)保存在變量anotherFactorial中,然后將factorial變量設(shè)置為null,結(jié)果指向原始函數(shù)的引用只剩下一個。
但在接下來調(diào)用anotherFactorial()時,必須執(zhí)行factorial(),而factorial已經(jīng)不是函數(shù), 所以就會導致錯誤。

Google Chrome測試了上述代碼,是不行的, 建議不用深入了解這部分的內(nèi)容。
在這種情況下,使用arguments.callee可以解決這個問題。

arguments.callee是一個指向正在執(zhí)行的函數(shù)的指針,因此可以用它來實現(xiàn)對函數(shù)的遞歸調(diào)用。

function factorial(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num-1);
    }
}

“return num * arguments.callee(num-1);”  通過使用arguments.callee代替函數(shù)名,可以確保無論怎么調(diào)用函數(shù)都不出問題。
因此,在編寫遞歸函數(shù)時,使用arguments.callee總比使用函數(shù)名更保險。

但在嚴格模式下,不能通過腳本訪問arguments.callee, 訪問這個屬性會導致錯誤。

不過我們可以使用命名函數(shù)表達式來達成相同的成果。

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 指向了一個空對象。

anotherFactorial(4); //24
////anotherFactorial 指向了函數(shù)f, 所以還可以正常調(diào)用。

看完了這篇文章,相信你對“javascript函數(shù)表達式怎么用=”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道,感謝各位的閱讀!

當前名稱:javascript函數(shù)表達式怎么用=-創(chuàng)新互聯(lián)
地址分享:http://muchs.cn/article42/idhec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)App開發(fā)、微信公眾號、ChatGPT、網(wǎng)站制作、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化