为什么typeof函数在这里成为对象?

时间:2017-08-24 04:36:41

标签: javascript

为什么函数类型是以下javascript代码中的对象?



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




两者都会给出相同的结果 输出为 1对象

不应该 1功能吗?

编辑1:请参见下图图片我在chrome 60 enter image description here

获得1个对象

1 个答案:

答案 0 :(得分:0)

从您发布的隔离代码中获取typeof f === 'object'是不可能的,因为f未在您使用它的范围内定义。条件中的函数定义不是函数声明,它是function expression。名称f仅在新创建的函数的主体中可见,在所述函数之外不可用。这使typeof f返回undefined,对f的任何其他引用都会引发参考错误。

因此获得1object的唯一可能方法是在发布的屏幕截图中编写显示的代码之前定义一个名为f的对象或数组,无论是在控制台中,还是在后面打开的页面上控制台。

命名函数表达式的这种行为在标准中定义。在非常老的IE中你会得到1function,因为旧的IE也创建了命名函数表达式的全局副本。