日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
怎么在javascript中對函數(shù)進行聲明-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關怎么在javascript 中對函數(shù)進行聲明,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

成都創(chuàng)新互聯(lián)公司是一家以重慶網(wǎng)站建設、網(wǎng)頁設計、品牌設計、軟件運維、成都網(wǎng)站推廣、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計為成都塔吊租賃等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務。

常用閉包的同學肯定很清楚下面一段代碼:

//通常的閉包寫法
(function () {
 ...
}())

那么我們的問題來了,為什么要在 function () {...}() 之外用圓括號包裹呢?解答這個問題,就需要我們理解 Javascript 中函數(shù)表達式與函數(shù)聲明的概念。

函數(shù)定義帶來的錯誤

雖然 function () {...} 看上去像是一個函數(shù)聲明,但是由于沒有函數(shù)名,它的本質(zhì)其實是一個函數(shù)表達式。我們看下規(guī)范中對于函數(shù)聲明與函數(shù)表達式的定義:

怎么在javascript 中對函數(shù)進行聲明

可以看出來,函數(shù)聲明是必須帶有函數(shù)名的。所以在直接執(zhí)行 function () {...}() 時候會報語法錯誤,原因就是函數(shù)表達式被嘗試解析為函數(shù)聲明時沒有找到函數(shù)名。

怎么在javascript 中對函數(shù)進行聲明

那么我們繼續(xù)嘗試寫上函數(shù)名的情況:

function fn () {...}()

怎么在javascript 中對函數(shù)進行聲明

仍然會提示語法錯誤,不過這次的出錯的位置在后面 () 中的 ) 上。

先不解釋為什么,看接下來的示例:

怎么在javascript 中對函數(shù)進行聲明

從這個結果可以看出,函數(shù)聲明之后的 () 會被解析為分組運算符,而不是函數(shù)調(diào)用。那么如何才能使函數(shù)執(zhí)行呢?

如何正確解析函數(shù)表達式

根據(jù)規(guī)范,函數(shù)表達式必須在 Expression 中才能進行正確的語法解析。恰巧 () 在作為分組運算符時,里面的內(nèi)容會被認為是 Expression。

(function () {...}())
(function () {...})()

上述兩種寫法都是正確的。第一種寫法比較清晰,函數(shù)表達式被正確解析并調(diào)用。第二種寫法中,解析器首先處理 (function () {...}) 部分,由于分組運算符不會對其中內(nèi)容進行 GetValue 操作,所以在語句結束時,其中的函數(shù)表達式被直接返回,之后的 () 則表示函數(shù)調(diào)用。

我們來簡單的用一個例子表示一下:

var a = function () {...}
(a()) //形同 (function () {...}())
(a)() //形同 (function () {...})()

這個例子稍有不恰當,因為直接執(zhí)行 a() 是可行的,而直接執(zhí)行function () {...}()則不行,原因就是上面提到的,function () {...}被嘗試解析為函數(shù)聲明而引發(fā)了語法錯誤。

其他方式

上面我們提到通過 () 分組運算符,可以將匿名函數(shù)正確的理解為函數(shù)表達式。同理,我們也可以通過許多其他的運算符將函數(shù)表達式正確執(zhí)行。

!function () {}()
void function () {}()
+function () {}()
-function () {}()
if (function () {}()) {} 
...

由于很多操作符會改變函數(shù)返回值,比如!function () {return 0},void function () {}()+ function () {}()等,所以我們一般使用 () 將匿名函數(shù)包裹使其被正確解析為函數(shù)表達式。

關于怎么在javascript 中對函數(shù)進行聲明就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


本文標題:怎么在javascript中對函數(shù)進行聲明-創(chuàng)新互聯(lián)
標題來源:http://www.dlmjj.cn/article/eeopj.html