第15题 以下代码输出什么

    ;(function b() {
      b = 123
      console.log(b)
    })()

输出

    function b() {
      b = 123
      console.log(b)
    }
  • IIFE中的foo函数名相当于是使用const关键字定义的,因此没有办法对一个常量再赋值。相当于创建了一个局部的作用域,并且以 const 声明为常量,严格模式下会报错,无法对常量重新赋值,因此执行结果将打印出函数声明,等价于 const b = function() { }
  • 在严格模式下,直接报TypeError类型的错误,这类错误同数据类型相关.
  • 在非严格模式下,会忽略对常量的赋值

如果是匿名函数:

    ;(function () {
      b = 123
      console.log(b)
    })()

则由于局部变量无法找到,继续寻找全局变量,导致输出结果为 123

Last Updated:
Contributors: leeguooooo