You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.on("load")获取函数返回值并存入变量?

解决立即执行函数表达式(IIFE)的引用错误并保存返回值

你遇到的问题核心在于:**命名式立即执行函数表达式(IIFE)**里的函数名,只在该函数的内部作用域有效,外部根本访问不到它——这就是为什么你后面写item.on("load", myFunction)时会抛出Uncaught ReferenceError: myFunction is not defined的原因。

下面给你几个实用的解决方案,按需选择:

方案1:拆分定义、执行与绑定(最推荐)

先单独定义函数,这样既能立即执行获取返回值,又能把函数绑定到load事件,逻辑清晰且易维护:

function myFunction() {
  var something = 0;
  return something;
}

// 立即执行函数,把返回值存入变量
var mySomething = myFunction();
// 将函数绑定到元素的load事件
item.on("load", myFunction);

console.log(mySomething); // 输出 0

方案2:用IIFE返回包含函数和值的对象

如果一定要用IIFE的写法,可以让它返回一个对象,同时暴露函数本身和计算出的返回值:

var wrapper = (function myFunction() {
  var something = 0;
  // 返回对象,同时提供函数引用和返回值
  return {
    func: myFunction,
    value: something
  };
})();

// 提取返回值到mySomething
var mySomething = wrapper.value;
// 绑定函数到load事件
item.on("load", wrapper.func);

console.log(mySomething); // 输出 0

这里IIFE内部的myFunction可以被自身引用,通过返回对象把它暴露给外部作用域,就能正常绑定事件了。

方案3:先绑定事件,再手动执行函数

如果函数在load触发时和立即执行时的逻辑完全一致,也可以先绑定事件,再手动调用一次来获取值:

function myFunction() {
  var something = 0;
  return something;
}

// 先绑定load事件
item.on("load", myFunction);
// 手动执行函数,保存返回值
var mySomething = myFunction();

console.log(mySomething); // 输出 0

补充说明原代码报错原因

你写的是命名函数表达式的IIFE,这种语法下,函数名myFunction是该函数的内部标识符,不属于外部作用域,所以外部无法直接引用它。只有把函数暴露到外部作用域(比如单独定义、或者通过返回对象暴露),才能在item.on里正常使用。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:54:43