Promise中then里面加入IIFE为什么console.log会报错?

新手上路,请多包涵

Promise中then里面加入IIFE为什么console.log会报错?

当Promise中then里面加入自执行函数,并且自执行函数上面有console.log,代码中就会报错,错误消息是TypeError: console.log(...) is not a function,菜鸟的我真的不知道问题所在
new Promise((resolve) => {
    setTimeout(() => {
        resolve('Promise 01')
    }, 2000)
}).then((value) => {
    console.log(value)
    (function() {
        console.log('执行')
    }())
})

执行的结果是能打印出“Promise 01”和“执行”后就报错了,错误消息是TypeError: console.log(...) is not a function,如果把console.log(value)注释掉就能正常执行,输出结果是:Promise 01、 执行。如果把console.log(value)放在自执行函数下面也能正常执行。虽然then里面放IIFE很少见,但是我关注的是为什么会有这个结果?

阅读 2.5k
3 个回答
console.log(value)
    (function() {
        console.log('执行')
    }())

console.log(value)没加分号,编译器把它和后面一条语句合并解释了,等同于

console.log(value)(function() {
        console.log('执行')
    }())

console.log(...) is not a function 就很明显了

少了分号的原因,

会把console.log(value)(function() {

    console.log('执行')
}())

解析成一整个去执行

可以在IIFE前加上void!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题