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

由匿名函数定义的Object工作原理及代码中return语句作用解析

解析这段匿名函数封装的JavaScript代码

先把你贴的代码重新格式化一下,看起来更清晰:

myAcessors = (function() {
  var data = "data";
  var getData = function() { console.log(data); };
  var setData = function(val) { data = val; };
  return { 
    getData: getData, 
    setData: setData 
  };
})();

先讲整体工作原理

这段代码用了立即执行函数表达式(IIFE)——就是那个被括号包起来的匿名函数,后面跟着(),意思是函数定义完立刻执行。

  • 函数内部定义了三个东西:私有变量data,读取data的函数getData,修改data的函数setData。
  • 这里的核心是闭包:内部的getData和setData函数,即使在外部函数执行完毕后,依然能记住并访问data变量,因为它们是在包含data的词法作用域里定义的。
  • 最关键的是,data是函数内部的变量,全局作用域里根本访问不到它,这就实现了数据的私有性,不会污染全局变量,也避免了意外修改。

再说说return的作用

这个return语句是整个代码的"出口":
它返回了一个普通对象,这个对象里把内部的getData和setData函数作为属性暴露了出去。当IIFE执行完毕后,这个返回的对象就被赋值给了全局变量myAcessors。

简单说:

  • 你没法直接写myAcessors.data去拿那个内部的data值(会返回undefined),但你可以通过myAcessors.getData()来读取它,通过myAcessors.setData("新值")来修改它。
  • 相当于用return把内部的操作函数"暴露"给外部,同时把data藏在函数内部,只允许通过指定的方法来操作它,这就是JavaScript里模拟私有属性的经典写法。

举个实际运行的例子:

myAcessors.getData(); // 控制台打印 "data"
myAcessors.setData("我的新数据");
myAcessors.getData(); // 控制台打印 "我的新数据"
console.log(myAcessors.data); // 输出 undefined,因为data是私有变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:11:22