JavaScript插入预定义对象到空数组的匿名函数为何返回undefined
问题原因及解决方案
为什么现有代码返回undefined
你当前的代码只是定义了一个匿名函数,并没有执行这个函数,因此无法拿到函数内部return的返回值。另外单独写无函数名的function() {}属于不合法的函数声明语法,部分环境下会直接抛出语法错误。
你之前测试push没生效的核心原因也是函数未执行,push是数组的原生方法,只要调用对象是数组就可以正常使用,你看到的「不能对对象用push」指的是普通的Object类型对象,不是数组,数组调用push完全合法。
实现目标的可用方案
方案1:使用立即执行函数(IIFE)
定义函数后立即调用,直接获取返回值:
// 原逻辑版本 (function () { var x = []; x[0] = {'first': 1, 'second': 2, 'third': 3}; return x; })()
使用push的版本也可以正常运行:
// push版本 (function () { var x = []; x.push({'first': 1, 'second': 2, 'third': 3}); return x; })()
以上代码运行后就会直接返回你需要的[ {'first': 1, 'second': 2, 'third': 3} ]结果。
方案2:不使用函数包裹,直接执行逻辑
你之前逐行运行不带函数的代码能拿到结果就是因为逻辑直接执行了,最后输出变量即可:
var x = []; x[0] = {'first': 1, 'second': 2, 'third': 3}; // 或者替换为 x.push({'first': 1, 'second': 2, 'third': 3}); x
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

