var x = 1;
if (function f(){}) {
x += typeof f;
}
console.log(x);
请问打印结果为什么是"1undefined"?
var x = 1;
if (function f(){}) {
x += typeof f;
}
console.log(x);
请问打印结果为什么是"1undefined"?
说下总结,考点有二:
1,if(/expression/) 中接收表达式,而非函数声明。
2,在函数表达式中函数名在外部取不到(因为可有可无)。函数声明中函数名是必须的;函数表达式中则是可选的。
所以刚才那个题目取不到if()中的f.
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
表达式,
if(function f(){})
里的function f(){}
是一个带名称的函数表达式,不是一个函数声明语句f
这个名称只能在函数体内访问也只有表达式,才能直接
function f(){}()
把一个函数声明语句变成表达式,在最外面加入() 就行了,或者本身在一个表达式语境里,就不用加(),() 是用来消除歧义的。
因为
return
后面也是返回一个表达式,所以function f(){}
被认为是一个 表达式,所以直接执行就没有报错;if
里也是只接受表达式,所以就没有声明变量f