[英]What will be the output of the code below?
我正在处理一些典型的 Javascript 面试问题,并遇到了这个问题。 我对答案和解释感到困惑,想知道是否有人可以更深入地重新表述。
下面代码的输出是什么?
var y = 1; if (function f() {}) { y += typeof f; } console.log(y);
说明:输出将是 1undefined。 if 条件语句使用 eval 进行计算,因此 eval(function f(){}) 返回 function f(){} (这是真的)。 因此,在 if 语句内部,执行 typeof f 会返回 undefined 因为 if 语句代码在运行时执行,而 if 条件中的语句是在运行时计算的。
if 条件语句使用 eval 进行评估
一点都不。 if
条件中的内容是一个函数表达式,并且函数(如所有 Javascript 对象)是真实的。
函数表达式本身(与函数声明不同 - 即function fnName() { ...
在它们自己的行中)不会导致函数在当前范围内接收变量名,因此f
不被视为变量名- 它只是函数表达式的函数名称。
函数表达式在if
条件中被评估为真值,然后不再被引用。 在代码的任何位置都没有名为f
变量,因此typeof f
解析为undefined
( typeof f
将解析为undefined
无论它放在代码中的什么位置)。
相反,如果f
是单独一行的函数声明,则会创建一个名为f
的变量名(因此typeof f
将导致function
):
var y = 1; function f() {} if (true) { y += typeof f; } console.log(y);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.