为什么函数类型是以下javascript代码中的对象?
var y = 1;
if (function f(){}) {
y += typeof f;
}
console.log(y);

两者都会给出相同的结果 输出为 1对象
不应该 1功能吗?
获得1个对象答案 0 :(得分:0)
从您发布的隔离代码中获取typeof f === 'object'
是不可能的,因为f
未在您使用它的范围内定义。条件中的函数定义不是函数声明,它是function expression。名称f
仅在新创建的函数的主体中可见,在所述函数之外不可用。这使typeof f
返回undefined
,对f
的任何其他引用都会引发参考错误。
因此获得1object
的唯一可能方法是在发布的屏幕截图中编写显示的代码之前定义一个名为f
的对象或数组,无论是在控制台中,还是在后面打开的页面上控制台。
命名函数表达式的这种行为在标准中定义。在非常老的IE中你会得到1function
,因为旧的IE也创建了命名函数表达式的全局副本。