在JavaScript中,我不理解下面代码的输出

时间:2017-02-15 17:05:24

标签: javascript function



var y = 1;
if (function f(){}) {
    y += typeof f;
}
console.log(y);




我预计输出将是' 1功能'。但是,实际输出是' 1未定义'。据我所知,如果语句可以访问函数f,函数声明将被提升并在内部。但为什么它打印出undefined,好像函数尚未声明?

1 个答案:

答案 0 :(得分:2)

您无法在条件中声明函数。只要将函数声明放在if语句之外,就可以在条件中使用它,结果将如你所愿:

var y = 1;
function f(){}
  if (f) {
    y += typeof f;
  }
  console.log(y);

编辑:好吧,事实证明你实际上是CAN(有点*),但不是所选的符号。这将有效:

var y = 1, f;
  if (f = function(){}) {
    y += typeof f;
  }
  console.log(y);

*正如Teemu在评论中指出的那样,这不是一个真正的函数声明,而是一个匿名函数,它的引用分配给变量f