javascript - var functionName = function() {} vs function functionName() {}

标签 javascript function methods syntax

我最近开始维护别人的 JavaScript 代码。我正在修复错误、添加功能并尝试整理代码并使其更加一致。

之前的开发人员使用了两种声明函数的方式,我无法确定其背后是否有原因。

这两种方式是:

var functionOne = function() {
    // Some code
};

并且,

function functionTwo() {
    // Some code
}

使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有没有什么事情可以用一种方法完成而另一种方法不能完成?

最佳答案

不同之处在于,functionOne 是一个函数表达式,因此仅在到达该行时才定义,而 functionTwo 是一个函数声明,并且在其周围的代码行后立即定义。函数或脚本被执行(由于 hoisting )。

例如函数表达式:

// TypeError: functionOne is not a function
functionOne();

var functionOne = function() {
  console.log("Hello!");
};

并且,函数声明:

// Outputs: "Hello!"
functionTwo();

function functionTwo() {
  console.log("Hello!");
}

从历史上看, block 内定义的函数声明在浏览器之间的处理方式不一致。 Strict mode (在 ES5 中引入)通过将函数声明范围限定到其封闭 block 来解决此问题。

'use strict';    
{ // note this block!
  function functionThree() {
    console.log("Hello!");
  }
}
functionThree(); // ReferenceError

关于javascript - var functionName = function() {} vs function functionName() {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284772/

相关文章:

javascript - 从 Javascript 插入时 SVG 不起作用

javascript - 在导致错误的 JavaScript 花括号中返回一个对象

pointers - 方法数组

javascript - 如何从 html 的其他部分在 var textarray 中输入文本?

javascript - 在 Web 应用程序上显示从 Twitter API 提取的 Emoji Unicode 字符的问题

javascript - 如何从 excel 文件中获取输入并在速度计上显示输出

php - 使用PHP在mysql中拉取数据显示搜索表单结果

c - Extern "C"NULL 函数指针

javascript - 将 javascript 函数作为参数传递,并将其内容作为类内容求值

function - Julia:多种类型的相同功能?