我是JS的新手。如果问题太天真,请原谅我。
我正在和这样的IIFE合作:
var App = (function() {
var test = '';
var init = function() {
App.test = 'test';
};
return {
init: init
};
})();
如果我没有退回,为什么会暴露App.test?我以为只返回变量才会暴露(比如App.init)。而且,如何设置App.test的值而不暴露它?
通过公开它我的意思是可以在IIFE之外访问(即:浏览器控制台)
提前致谢!
答案 0 :(得分:4)
您的App.test
属性与该匿名函数中的局部变量test
不同。它只是在您调用App.init()
时创建的App对象的属性。
在任何对象上,代码通常可以随意创建属性,因此您也可以执行类似
的操作App.favoriteColor = "blue";
现在,如果您尝试做的是将test
变量作为私有数据存储保留在闭包中,那么您的init()
函数应该直接引用它而不是指的是" App"对象:
var init = function() {
test = 'test';
}
答案 1 :(得分:4)
运行App.init()
后,App.test
会有一个值,因为您在此处声明其值App.test = 'test';
。我猜你想把它保存为私有变量,所以你可能想要这样做:
var App = (function() {
var test = '';//this is private
var init = function() {
test = 'test';//private variable now!
};
return {
init: init
};
})();