使用IIFE时触发Uncaught TypeError:4 is not a function错误求助
解决IIFE触发"Uncaught TypeError: 4 is not a function"的问题
问题出在**自动分号插入(ASI)**机制上。JavaScript会在特定场景自动补充分号,但你这段代码里,var a = 4末尾没写分号,JS会把它和下一行的IIFE连在一起解析成:
var a = 4(function(){ var a = 5 console.log(a) })()
这相当于试图把数字4当作函数调用,自然会报错"4 is not a function"。
修复方案
- 给
var a = 4末尾加上分号:
var a = 4; (function(){ var a = 5 console.log(a) })() console.log(a)
- 或者在IIFE开头加一个分号(避免和前面代码粘连):
var a = 4 ;(function(){ var a = 5 console.log(a) })() console.log(a)
修复后运行代码,内部console.log(a)会输出5,外部console.log(a)会输出4,符合IIFE的作用域隔离预期。
内容的提问来源于stack exchange,提问作者Erenay Ata
相关产品推荐
相关产品推荐

