由匿名函数定义的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
相关产品推荐
相关产品推荐

