有一个JS问题,想不通为什么?求解答。

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

请问打印结果为什么是"1undefined"?
阅读 1.2k
2 个回答
if(/*expression*/)

表达式,if(function f(){}) 里的 function f(){} 是一个带名称的函数表达式,不是一个函数声明语句

clipboard.png

f 这个名称只能在函数体内访问

clipboard.png

也只有表达式,才能直接 function f(){}()

clipboard.png

把一个函数声明语句变成表达式,在最外面加入() 就行了,或者本身在一个表达式语境里,就不用加(),() 是用来消除歧义的。

clipboard.png

因为 return 后面也是返回一个表达式,所以 function f(){} 被认为是一个 表达式,所以直接执行就没有报错;

if 里也是只接受表达式,所以就没有声明变量 f

说下总结,考点有二:
1,if(/expression/) 中接收表达式,而非函数声明。
2,在函数表达式中函数名在外部取不到(因为可有可无)。函数声明中函数名是必须的;函数表达式中则是可选的。
所以刚才那个题目取不到if()中的f.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题