【发布时间】:2021-04-26 00:30:15
【问题描述】:
我最近遇到了一个面试问题,向我展示了这段代码(没有答案),并询问将打印到控制台的内容:
var i = 1;
if(function f(){}) {
i += typeof f;
}
console.log(i);
// prints "1undefined"
我知道 typeof 返回一个字符串。隐式类型转换将来自 typeof 评估的字符串和数字组合成 '1undefined'。但是,我认为它会打印 '1function'。
我不完全明白,为什么 f 不在范围内?
这甚至不是范围问题吗?函数声明是否仅仅是一个逻辑表达式,它作为 if 语句的一部分被评估为 true,然后不再存在于任何范围内?
任何澄清将不胜感激。
【问题讨论】:
-
函数在括号中声明,不向下传递。在括号内,您可以使用它。
-
这种情况下的函数名不应该绑定到封闭范围内。在一些旧的浏览器中,它是(错误的),但我认为这已经很多年了。函数名只绑定在函数内部,所以外部没有符号
f。 -
@Rojo 不,它根本没有在外部绑定(到函数本身)。
标签: javascript if-statement scope expression type-coercion