【问题标题】:What is the difference between these two? [duplicate]这两者有什么区别? [复制]
【发布时间】:2013-02-19 09:33:56
【问题描述】:

我看到以下 JavaScript 函数的工作方式完全相同,那么它们之间的区别是什么除了语法。 功能是:

var functionName=function(){
    //some code here
}; 

function functionName(){
    //some code here
} 

我用同样的方式称呼它们:

functionName();

请不要告诉我语法不同,除此之外还有什么不同,比如

1)speed of execution
2)Memory utilization etc.

提前致谢!

【问题讨论】:

标签: javascript jquery function


【解决方案1】:

在 StackOverflow 中已经多次回答了这个问题。这只是命名的方式。因此,从答案中提取一些观点,我会说:

  1. 函数声明和变量声明总是被 JavaScript 解释器以不可见的方式移动(“提升”)到其包含范围的顶部。显然,函数参数和语言定义的名称已经存在。

  2. 优点和缺点:

    命名函数有几个好处:

    • 元分析名称。 functionInstance.name 会显示你的名字。
    • 更重要的是,名称将打印在堆栈跟踪中。
    • 名称还有助于编写自我记录或识字代码。

    命名函数表达式有一个缺点

    • IE 存在 NFE 内存泄漏
  3. 另一个主要区别

    不同之处在于functionTwo 是在解析时为脚本块定义的,而functionOne 是在运行时定义的。例如:

    <script>
      // Error
      functionOne();
    
      var functionOne = function() {
      }
    </script>
    
    <script>
      // No error
      functionTwo();
    
      function functionTwo() {
      }
    </script>
    

参考文献

  1. var functionName = function() {} vs function functionName() {}
  2. Are named functions or anonymous functions preferred in JavaScript?
  3. Named function expressions demystified
  4. Function Declarations vs. Function Expressions
  5. var functionName = function() {} vs function functionName() {}

【讨论】:

  • 谢谢你这解决了我的疑问!
【解决方案2】:
  1. 第一个是命名函数表达式,它应该向调用者返回一些值。
  2. 第二个只是一个函数,是否返回值由你决定

【讨论】:

  • 我使用了 1) 函数而不返回任何值
猜你喜欢
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 2012-05-25
相关资源
最近更新 更多