![](/img/trans.png)
[英]What is the most efficient way to implement GroupBy in 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 + '!');
關於let
和const
相似的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.