我一直都知道要在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 + '!');
此时我很困惑.
为什么有这么多定义函数的方法?
何时/何地我应该使用每一个?
哪种方式更有效?
thiagoh.. 9
我认为这取决于您的需求.例如
这将myfunction
在本地范围内使用名称定义您的函数
function myfunction(fruit){ alert('I like ' + fruit + '!'); }
另一方面,下面的代码将定义一个名为变量的变量myfunction
,该变量指向本地范围内的一个annonimous函数.
var myfunction = function(fruit){ alert('I like ' + fruit + '!'); };
而下面的代码将定义当前日期所有浏览器都不支持的ECMA6的箭头功能.此外,let
statement声明一个块作用域局部变量,可选择将其初始化为一个值.因此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 + '!');
关于MDN参考文献的相似之处let
和const
相似之处
常量是块范围的,非常类似于使用let语句定义的变量.常量的值不能通过重新赋值来改变,也不能重新声明.
所以,正如Aurelio de Rosa所说,
常量与使用let声明的变量共享一个特性,因为它们是块作用域而不是函数作用域
了解更多关于const
这里
我认为这取决于您的需求.例如
这将myfunction
在本地范围内使用名称定义您的函数
function myfunction(fruit){ alert('I like ' + fruit + '!'); }
另一方面,下面的代码将定义一个名为变量的变量myfunction
,该变量指向本地范围内的一个annonimous函数.
var myfunction = function(fruit){ alert('I like ' + fruit + '!'); };
而下面的代码将定义当前日期所有浏览器都不支持的ECMA6的箭头功能.此外,let
statement声明一个块作用域局部变量,可选择将其初始化为一个值.因此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 + '!');
关于MDN参考文献的相似之处let
和const
相似之处
常量是块范围的,非常类似于使用let语句定义的变量.常量的值不能通过重新赋值来改变,也不能重新声明.
所以,正如Aurelio de Rosa所说,
常量与使用let声明的变量共享一个特性,因为它们是块作用域而不是函数作用域
了解更多关于const
这里