JavaScript中的三种函数声明之间到底有什么区别?

时间:2018-09-09 14:22:08

标签: javascript function

我知道Javascript中有3种不同类型的函数声明,并且我知道有细微的差别,但是我不知道为什么这样好,为什么我们需要全部三个?

function MyObject{
    function SomeName(){}

    this.SomeName = function(){}

    var SomeName = function(){} 
}

3 个答案:

答案 0 :(得分: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 = () => {}

答案 1 :(得分: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;
}

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

答案 2 :(得分:0)

  1. function SomeName(){} ==>创建此类函数时,这是一个整体行为,或者您可以说这是该函数的整体功能。

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

  3. var SomeName = function(){} ==> function SomeName(){}var SomeName = function(){}并没有太大的不同。因为这只是您需要的执行和使用方式。作为第三个版本,您使用的是为其分配一些值。因此,它可能比版本1消耗更多的内存。除此之外,我看不出它们之间有任何区别。在将var应用于任何函数的更多内容上,您是在为某个函数分配数据类型,从而在某些情况下限制其输出。

我希望我能简要解释一下您的概念。有任何建议或疑问,我想回应。