我一直都知道要在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 + '!');
此时我很困惑。
答案 0 :(得分:9)
我认为这取决于您的需求。例如
这将在您的本地范围
上使用myfunction
名称定义您的函数
function myfunction(fruit){
alert('I like ' + fruit + '!');
}
另一方面,下面的代码将定义一个名为myfunction
的变量,它指向本地范围内的一个循环函数。
var myfunction = function(fruit){
alert('I like ' + fruit + '!');
};
虽然下面的代码将定义当前日期所有浏览器都不支持的arrow function of ECMA6。此外,let
语句声明一个块作用域局部变量,可选择将其初始化为一个值。因此,在代码块关闭后,您的myfunction
变量将不会被显示。
let myfunction = fruit=> alert('I like ' + fruit + '!');
let
允许您将范围有限的变量声明为使用它的块,语句或表达式。您可以阅读更多内容并查看一些examples here
正如官方文件所说:
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 says,
常量与使用let声明的变量共享一个特性 它们是块作用域而不是函数作用域
详细了解const
here
答案 1 :(得分:1)
使用const
使得函数变量(或在这种情况下为常量)不能重新分配给其他东西。因此,该功能无法修改。
使用let
将函数的范围限制为它所定义的块,而var
将函数的范围限制为执行上下文。如MDN所定义:
用var声明的变量的范围是它的当前执行上下文,它是封闭函数,或者对于在任何函数外部声明的变量,是全局的。
例如,在for循环中使用let
会将该变量限制为for循环。
至于效率方面,我不知道其中任何一项会如何影响表现,但可能会有一些我不知道的细微差别。我怀疑任何人都会看到任何明显的性能差异。
答案 2 :(得分:1)
常量
让
MDN参考:
注意:如果我没记错的话,所有浏览器都不能正确解释let和const。