【问题标题】:Function declaration vs function definition JS函数声明 vs 函数定义 JS
【发布时间】:2014-03-19 11:48:22
【问题描述】:

JavaScript 中的函数声明和函数定义有什么区别?我读了第 5.3.2 章 from this book

然而,当嵌套时,函数声明可能 仅出现在它们嵌套的函数的顶层。也就是函数 定义不得出现在 if 语句、while 循环或任何其他语句中。

但不明白声明和定义之间的区别...请解释一下(注意:我理解函数表达式和函数声明之间的区别!)

【问题讨论】:

  • 请给我一些声明和JS的例子!
  • var x = function() { return true; }。我想你可以在这里说x = function 是声明,return true; 是该函数的定义。
  • 函数定义——没有函数名和函数声明的函数体——只有函数名,而不是函数体?

标签: javascript conceptual


【解决方案1】:

重要的是区分两种情况:

  • var f1 = function() {...} 这通常被称为函数表达式。

  • function f2() {...} 这通常被称为函数声明。

无论你给它起什么名字,var f1 都将被提升到包装函数的顶部(但 f1 只会在你编写它的那一行被赋予函数的值)。 但是f2 的整个函数声明将被提升到包装函数的顶部。

有一篇很棒的帖子更详细地解释了这一点here

【讨论】:

    【解决方案2】:

    在这种情况下,他们只是使用两个不同的术语来指代同一事物。官方*术语是“函数声明”。

    官方来源是ECMAScript标准的第98页。

    【讨论】:

    • “正式用语”?您可以通过官方文档的链接或引用来支持它吗?
    • JS 中的声明和定义同义词?
    • @igor_rb 我以前从未听说过“定义”,但在这里它们似乎是同义词,是的。
    • @JamesDonnelly:spec 指定 FunctionDeclaration 和 FunctionExpression 用于定义函数。
    • 这本书中的声明和定义用词非常频繁,给我带来了一些误解。谢谢!
    【解决方案3】:
    function isEven(num){
         if(num%2 === 0){
    return true;
    }else{
    return false;
    }
    }
    

    在上面的代码中function isEven(num)被称为函数声明,就像在你声明的那行代码中isEven你正在使用的是一个函数。

    花括号内的其余部分代码称为函数定义。您在哪里为函数 isEven 提供定义。

    在js中,我们没有将声明和定义分开,因为我们有提升。提升使您的函数声明和定义被提升到顶部,因此您甚至可以在定义之前使用该函数。

    在“C”等其他编程语言中,您没有提升功能。因此,函数的声明是在使用之前进行的,并且可以将定义放置在文件中我们想要的任何位置。

    因此有两个名字的原因和它们的含义。

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多