You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JS中IIFE代码报TypeError:{(intermediate value)}不是函数的原因咨询

为什么这段代码会抛出 TypeError: {(intermediate value)(intermediate value)(intermediate value)} is not a function

这个错误的核心原因是JavaScript自动分号插入(ASI)机制在这里没有帮你补充分号,导致引擎把代码解析成了完全错误的结构。

咱们先拆解下你的代码:

var sam = { name :"san", age:56, lastname:"tom" } (({name,lastname})=>{ console.log(name); console.log(lastname); })(sam);

JavaScript引擎会把这段代码错误地解析成:

var sam = ( { name :"san", age:56, lastname:"tom" } ( ({name,lastname})=>{ ... } ) )(sam);

简单来说,它误以为你是在调用前面的对象字面量(把{...}当成了一个函数),先把箭头函数作为参数传进去“调用”这个对象,接着又把sam作为参数调用这个“调用结果”——但对象本身根本不是函数,自然就抛出了“不是函数”的类型错误。

为什么ASI没生效?

ASI的规则里有个关键例外:如果下一行代码以(开头,引擎不会在当前行末尾自动插入分号。它会默认你是在延续当前的表达式(比如函数调用、分组表达式),而不是结束一个语句。

怎么修复?

只需要在对象字面量的末尾手动加上分号,明确告诉引擎这个语句已经结束:

var sam = { name :"san", age:56, lastname:"tom" };
(({name,lastname})=>{ console.log(name); console.log(lastname); })(sam);

手动加分号是最可靠、最清晰的做法,能彻底避免这类ASI相关的语法坑。

内容的提问来源于stack exchange,提问作者Santhosh Kumar

火山引擎 最新活动