以下代码的输出是什么?

时间:2019-12-23 02:13:47

标签: javascript

我正在处理一些典型的Javascript采访问题,并且遇到了这个问题。我对答案和解释感到困惑,并且想知道是否有人可以更深入地加以表述。

下面的代码输出是什么?

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

说明: 输出将是1undefined。 if条件语句使用eval求值,因此eval(function f(){})返回函数f(){}(这是真的)。因此,在if语句内部,执行typeof f返回未定义,因为if语句代码在运行时执行,并且if条件内部的语句在运行时求值。

1 个答案:

答案 0 :(得分:3)

  

if条件语句使用eval求值

不,一点也不。 if条件中包含一个函数表达式,并且函数(像所有Javascript对象一样)是真实的。

函数表达式本身(不同于函数声明-即function fnName() { ...本身)不会导致函数在当前作用域中接收变量名,因此看不见f作为变量名称-只是函数表达式的函数名称。

函数表达式在if条件内被评估为真,然后不再被引用。在代码的任何位置范围内都没有名为f的变量,因此typeof f解析为undefinedtypeof f会解析为undefined,无论它放置在什么位置那里的代码。)

相反,如果f是单独的函数声明,则会创建名为f 的变量名(因此typeof f将导致function):

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