在Javascript中声明函数的最有效方法是什么?

Fla*_*nix 10 javascript function

我一直都知道要在javascript中声明一个函数你应该做的事情如下:

function myfunction(fruit){
    alert('I like ' + fruit + '!');
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

var myfunction = function(fruit){
    alert('I like ' + fruit + '!');
};
Run Code Online (Sandbox Code Playgroud)

但是,最近,我注意到有些人实际上将函数定义为常量:

const myfunction = fruit=> alert('I like ' + fruit + '!');
Run Code Online (Sandbox Code Playgroud)

甚至使用关键字let:

let myfunction = fruit=> alert('I like ' + fruit + '!');
Run Code Online (Sandbox Code Playgroud)

此时我很困惑.

  • 为什么有这么多定义函数的方法?
  • 何时/何地我应该使用每一个?
  • 哪种方式更有效?

thi*_*goh 9

我认为这取决于您的需求.例如

这将myfunction在本地范围内使用名称定义您的函数

function myfunction(fruit){
    alert('I like ' + fruit + '!');
}
Run Code Online (Sandbox Code Playgroud)

另一方面,下面的代码将定义一个名为变量的变量myfunction,该变量指向本地范围内的一个annonimous函数.

var myfunction = function(fruit){
    alert('I like ' + fruit + '!');
};
Run Code Online (Sandbox Code Playgroud)

而下面的代码将定义当前日期所有浏览器都不支持的ECMA6箭头功能.此外,letstatement声明一个块作用域局部变量,可选择将其初始化为一个值.因此myfunction,在代码块关闭后,您的变量将不会被看到.

let myfunction = fruit=> alert('I like ' + fruit + '!');
Run Code Online (Sandbox Code Playgroud)

let允许您将范围有限的变量声明为使用它的块,语句或表达式.您可以在此处阅读更多内容并查看示例

正如官方文件所说:

const声明创建对值的只读引用.它并不意味着它拥有的值是不可变的,只是不能重新赋值变量标识符.

const myfunction = fruit=> alert('I like ' + fruit + '!');
Run Code Online (Sandbox Code Playgroud)

因此,如果您尝试重新分配myfunction,它将失败(静默)(但在Safari中不会失败)

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

关于MDN参考文献的相似之处letconst相似之处

常量是块范围的,非常类似于使用let语句定义的变量.常量的值不能通过重新赋值来改变,也不能重新声明.

所以,正如Aurelio de Rosa所说,

常量与使用let声明的变量共享一个特性,因为它们是块作用域而不是函数作用域

了解更多关于const 这里

  • 怎么样`const`?`const`和`let`之间有什么区别吗? (2认同)