簡體   English   中英

在Javascript中聲明函數的最有效方法是什么?

[英]What is the most efficient way to declare functions in Javascript?

我一直都知道要在javascript中聲明一個函數你應該做的事情如下:

function myfunction(fruit){
    alert('I like ' + fruit + '!');
}

或類似的東西:

var myfunction = function(fruit){
    alert('I like ' + fruit + '!');
};

但是,最近,我注意到有些人實際上將函數定義為常量:

const myfunction = fruit=> alert('I like ' + fruit + '!');

甚至使用關鍵字let

let myfunction = fruit=> alert('I like ' + fruit + '!');

此時我很困惑。

  • 為什么有這么多定義函數的方法?
  • 何時/何地我應該使用每一個?
  • 哪種方式更有效?

我認為這取決於您的需求。 例如

這將在本地范圍內使用myfunction名稱定義您的函數

function myfunction(fruit){
    alert('I like ' + fruit + '!');
}

另一方面,下面的代碼將定義一個名為myfunction變量 ,該變量指向本地范圍內的一個annonimous函數。

var myfunction = function(fruit){
    alert('I like ' + fruit + '!');
};

而下面的代碼將定義當前日期所有瀏覽器都不支持的ECMA6箭頭功能 此外, let語句聲明一個塊作用域局部變量,可選擇將其初始化為一個值。 因此,在代碼塊關閉后,您的myfunction變量將不會被看到。

let myfunction = fruit=> alert('I like ' + fruit + '!');

let允許您將范圍有限的變量聲明為使用它的塊,語句或表達式。 您可以在此處閱讀更多內容並查看示例

正如官方文件所說:

const聲明創建對值的只讀引用。 它並不意味着它擁有的值是不可變的,只是不能重新賦值變量標識符。

const myfunction = fruit=> alert('I like ' + fruit + '!');

因此,如果您嘗試重新分配myfunction ,它將失敗(靜默)(但在Safari中不會失敗)

// this will fail silently in Firefox and Chrome 
myfunction = fruit=> alert('No! I DO NOT like ' + fruit + '!');

關於letconst相似的MDN參考說明了這一點

常量是塊范圍的,非常類似於使用let語句定義的變量。 常量的值不能通過重新賦值來改變,也不能重新聲明。

所以,正如Aurelio de Rosa所說

常量與使用let聲明的變量共享一個特性,因為它們是塊作用域而不是函數作用域

閱讀更多關於const 信息

使用const使得函數變量(或在這種情況下為常量)不能重新分配給其他東西。 所以功能無法修改。

使用let將函數的范圍限制為它所定義的塊,而var則將函數的范圍限制為執行上下文。 如MDN所定義:

用var聲明的變量的范圍是它的當前執行上下文,它是封閉函數,或者對於在任何函數外部聲明的變量,是全局的。

例如,在for循環中使用let會將該變量限制為for循環。

至於效率,我看不出其中任何一個會影響性能,但可能會有一些我不知道的細微差別。 我懷疑任何人都會看到任何明顯的性能差異。

常量

  • 提供對函數變量的只讀引用,您可以將其視為常量函數,但不要將其視為不可變函數。

  • 允許您創建一個本地函數,這意味着它的作用域僅在它所在的封閉塊內有效。

MDN參考:

注意 :如果我沒記錯的話,所有瀏覽器都不能正確解釋let和const。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM