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