【问题标题】:Javascript function versus function expression [duplicate]Javascript函数与函数表达式[重复]
【发布时间】:2016-05-27 20:23:00
【问题描述】:

考虑这两个 sn-ps:

片段 #1

function countDownFn(num) {
  if (num === 0) return;

  console.log(num);
  countDownFn(--num);
}

countDownFn(5); // prints 5, 4, 3, 2, 1 once per line

片段 #2

var myCounter = function countDownExp(num) {
  if (num === 0) return;

  console.log(num);
  countDownExp(--num);
};

myCounter(5); // prints 5,4,3,2,1 once per line
  1. 为什么我可以找到window.countDownFn,但找不到找到window.countDownExp
  2. 为什么要使用其中一种?
  3. 其中一个比另一个更好吗?为什么?

【问题讨论】:

    标签: javascript browser hoisting


    【解决方案1】:
    var myCounter = function countDownExp(num) {
      if (num === 0) return;
    
      console.log(num);
      countDownExp(--num);
    }
    

    countDownExp 是一个命名表达式。该名称仅在函数内部可用,并且在函数需要递归时使用。命名表达式只发生在函数表达式而不是函数声明上。

    【讨论】:

      【解决方案2】:

      尝试将var myCounter = function countDownExp 更改为function countDownExp 这将使其可用于窗口对象。

      函数声明 function example(){} 提升整个功能。这意味着即使在编写函数的地方也可以使用该函数。

      函数表达式 var example = function(){} 提升变量,但在将匿名函数分配给变量的代码行之前,示例将是未定义的。

      我更喜欢函数声明,因为我不必担心提升问题。

      【讨论】:

        猜你喜欢
        • 2019-09-27
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 2023-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多