Javascript 下面代码的输出是什么?

Javascript 下面代码的输出是什么?,javascript,Javascript,我正在研究一些典型的Javascript面试问题,遇到了这个问题。我对答案和解释感到困惑,我想知道是否有人能更深入地解释一下 下面代码的输出是什么 vary=1; if(函数f(){}){ y+=f的类型; } 控制台日志(y) if条件语句使用eval进行计算 不,一点也不。如果条件是一个函数表达式,函数(像所有Javascript对象一样)是真实的,内部的内容是什么 函数表达式本身(与函数声明不同-即,Function fnName(){…在它们自己的行上)不会导致函数在当前范围内接收变量

我正在研究一些典型的Javascript面试问题,遇到了这个问题。我对答案和解释感到困惑,我想知道是否有人能更深入地解释一下

下面代码的输出是什么

vary=1;
if(函数f(){}){
y+=f的类型;
}
控制台日志(y)
if条件语句使用eval进行计算

不,一点也不。如果
条件是一个函数表达式,函数(像所有Javascript对象一样)是真实的,
内部的内容是什么

函数表达式本身(与函数声明不同-即,
Function fnName(){…
在它们自己的行上)不会导致函数在当前范围内接收变量名,因此
f
不被视为变量名-它只是函数表达式的函数名

函数表达式在
if
条件中被计算为truthy,然后不再被引用。代码中任何地方的作用域中都没有名为
f
的变量,因此
typeof f
解析为
未定义的
typeof f
将解析为
undefined
,无论它位于代码中的何处)

相反,如果
f
是其自身行上的函数声明,则将创建名为
f
的变量名(因此
typeof f
将导致
函数
):

vary=1;
函数f(){}
如果(真){
y+=f的类型;
}

console.log(y);
不,如果条件是真实的,因为函数是真实的你:你的浏览器内置了一个JS引擎,你应该做的是打开开发工具,粘贴代码,然后简单地运行它。如果你的问题不是“输出是什么”,而是“为什么输出…”然后更新你的帖子和标题。我喜欢这些问题,但不知道它们是否被用于真正的商业代码中?不是为了判断,我只是想知道,因为我还在上学…@LoiNguyenHuynh,我希望不是。ESLint将禁止此代码,因为违反了。它还能够静态分析代码,并检测
f
变量名是否有此功能不存在,因此任何尝试使用
f
(使用
typeof
除外)的行为也会抛出一个linting错误。