JavaScript中三种函数声明类型之间的区别是什么?

3

我知道JavaScript中有3种不同类型的函数声明,虽然它们之间存在一些细微的差异,但我不知道为什么这是好的,我们为什么需要全部3种类型?

function MyObject{
    function SomeName(){}

    this.SomeName = function(){}

    var SomeName = function(){} 
}

第二个不太有效。 - Ioan
3个回答

3

function SomeName(){}:你不能将 SomeName 分配为其他内容;该函数被挂起到最近的函数范围,使你能够在代码的底部声明它,并在顶部使用它。

this.SomeName = function(){}:你公开此函数以便可以通过 MyObject.SomeName 访问它。

var SomeName = function(){}:你可以将 SomeName 分配给另一个内容;变量名称被挂起到最近的函数范围,但在声明之前使用它将导致 SomeName 不是函数错误。

仅供娱乐,还有

const SomeName = function(){}:你不能将 SomeName 分配为其他内容;在声明之前使用它将导致 SomeName 未定义的错误。

let SomeName = function(){}:你可以将 SomeName 分配给另一个内容;在声明之前使用它将导致 SomeName 未定义的错误。

偏好

个人而言,我倾向于使用 export function SomeName(){} ,但当我不立即导出该函数时,我会使用 const SomeName = () => {}


2

实际上它们很相似。你问的是函数表达式和函数声明之间的区别。

// function declaration
function add(a, b) {
  return a+b; 
}

// function expression
var add = function(a, b) {
  return a+b;
}

仍然存在一个显著的区别:

提升: 当加载JavaScript文件时,所有使用函数声明编写的函数都会被提升,基本上在执行任何代码之前就已经“知道”了。因此,您可以在程序早期调用函数并稍后声明它。它会起作用。

这与“函数表达式”不同。如果在表达函数之前调用函数,则无法工作。

// function declaration works
add(5, 10);
function add(a, b) {
  return a+b;
}

// function expression doesn't work
subtract(3, 9);
var subtract = function(a, b) {
  return a - b;
}

因此,您必须在使用函数表达式之前声明它们。

0
  1. function SomeName(){} ==> 当你创建这样的函数时,它是一个完整的行为或者说是这个函数的整体功能。

  2. this.SomeName = function(){} ==> 这个用于特定实例的时间,并将该函数的输出作为任何数据类型后续使用。

  3. var SomeName = function(){} ==> function SomeName(){}var SomeName = function(){} 没有太大的区别。因为它只取决于你如何执行和使用它。在第三个版本中,你正在给它分配一些值。因此,它可能会比版本1消耗更多的内存。除此之外,我没有看到它们之间的任何区别。更重要的是,将 var 应用于任何函数都会将数据类型分配给函数,从而限制其在某些上下文中的输出。

我希望我在简短的解释中让您的概念清晰了。如果有任何建议或疑问,我很乐意回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接