當前位置:
首頁 > 知識 > 解析JavaScript函數的多種寫法

解析JavaScript函數的多種寫法

在JavaScript代碼中,很多人應該都會知道如何定義和調用函數。對於編寫和維護測試瀏覽器JavaScript標準來說,這是一個十分常見的挑戰,尤其是當一個新特性出現且與現有的函數語法有關聯,或者擴展了現有函數的API時。有必要確保新的或被提議的語法和API是有效的,且對語言中的每一個現有變體都是有效的。本文對JavaScript中已經存在的函數語法格式的概述說明。

函數聲明和表達式(舊方法):

最早的函數定義形式就是函數聲明和函數表達式。前者是最初設計的一部分(1995)並出現在第一個版本的規範(1997年)中,後者是在第三個版本(1999年)引入的。我們可以從這些規範中提取三種不同的定義形式:

要注意的是匿名函數表達式可能仍然有一個「名稱」。

Function構造器

當我們在討論一種語言的「函數API」的時候,就已經開始討論Function構造器。函數聲明的語法形式可以被解釋為函數構造器的API的「文字」形式。Function構造器為定義函數提供了一種方法:通過N個字元串參數指定函數參數和函數主體,(如下面的例子)最後一個字元串參數始終是函數主體(需要指出的是,這是一種動態求值形式,會有潛在的安全風險)。對於大多數情況來說,這種形式並不適合,因此它的使用非常稀少——但是自從第一個版本的ECMAScript以來,它就一直存在在JavaScript中了。

新方法:

自從ES2015推出以來,已經引入了幾種新的語法形式。這些形式的變化是巨大的!

not-so-anonymous函數聲明

這是一種新的匿名函數聲明形式,如果你曾用過ES Modules,應該清楚這種語法。雖然它可能看起來與匿名函數表達式非常相似,但它實際上有一個默認名稱,即「default」

這個「default」本身並不是有效的標識符,並且沒有綁定在該匿名函數上。

方法定義:

對於下面這個例子,大家應該能很快發現它定義了匿名和命名函數表達式作為屬性的值。注意,這些不是不同的語法形式。它們是之前討論過的函數表達式的示例,是在初始對象時編寫的。這種形式最初是在ES3中引入的。

在ES5中引入了訪問器屬性定義:

從ES2015開始,JavaScript提供了一個簡單的語法來定義方法,這種語法包括文字屬性名稱和計算屬性名稱形式,以及訪問器形式:

我們還可以使用這些新形式作為類聲明和表達式中的原型方法的定義:

和定義靜態方法:

生成器:

生成器有一種特殊的語法,除了箭頭函數和定義setter / getter方法的時候不能添加之外,可以被添加在其他所有語法形式中。我們可以用其生成函數聲明、表達式、定義,甚至構造函數。讓我們把它們列出來:

想要系統學習web前端和免費學習資料的 可以加裙六二三九六六八零六


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT技術java交流 的精彩文章:

C語言 代碼之坦克大戰
web前端和Java學哪個好?哪個就業形勢好
面試官就問了一個Java問題,幾十號人集體蒙圈?
怎樣成為一個JavaWeb開發者?
QQ音樂播放器簡易開發

TAG:IT技術java交流 |

您可能感興趣

mysql中concat函數,concat_ws函數,concat_group函數之間的區別
python實現並繪製 sigmoid函數,tanh函數,ReLU函數,PReLU函數
Python中的lambda函數
Python 特殊函數(lambda,map,filter,reduce)
php中curl同時發送多個請求curl_multi函數集的用法
Linux下C函數庫:glibc與newlibc
request,ProxyHandle與HttpCookiProcessor函數用法
mysql字元串連接concat和concat ws函數
Python 3 print 函數用法總結
VBScript 函數
基於fminsearch的約束優化函數fminsearchbnd, fminsearchcon
揭秘 Python 中的 enumerate 函數
自定義損失函數Gradient Boosting
excel函數left與right的使用教程
Excel文本函數search和searchb教程
ES6 Generator 函數
printf()函數詳解
徹底理解 Node.js 中的回調(Callback)函數
使用Istio控制Serverless架構Fn Project中的函數間流量路由
Excel函數公式:強大的文本函數Find和Findb