Javascript函数与函数表达式

时间:2016-05-27 20:23:00

标签: javascript browser hoisting

考虑这两个片段:

Snippet#1

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

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

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

Snippet#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. 其中一个比其他人好吗?为什么?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

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