IIFE 中的变量作用域
Variable scope inside IIFE
我是 JS 的新手。如果问题太幼稚,请原谅我。
我正在使用这样的 IIFE:
var App = (function() {
var test = '';
var init = function() {
App.test = 'test';
};
return {
init: init
};
})();
如果我不退货,为什么 App.test 会暴露?我以为只有返回的变量会被公开(比如 App.init)。而且,如何设置 App.test 的值而不暴露它?
通过公开它,我的意思是可以在 IIFE 之外访问(即:浏览器的控制台)
提前致谢!
你的App.test
属性和那个匿名函数中的局部变量test
不一样。它只是您调用 App.init()
.
时创建的 App 对象的 属性
在任何对象上,代码通常可以随意创建属性,所以你也可以这样做
App.favoriteColor = "blue";
现在,如果您要做的是将 test
变量作为私有数据存储保存在闭包中,那么您的 init()
函数应该直接引用它而不是引用 "App" 对象的 属性:
var init = function() {
test = 'test';
}
一旦你 运行 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
};
})();
我是 JS 的新手。如果问题太幼稚,请原谅我。
我正在使用这样的 IIFE:
var App = (function() {
var test = '';
var init = function() {
App.test = 'test';
};
return {
init: init
};
})();
如果我不退货,为什么 App.test 会暴露?我以为只有返回的变量会被公开(比如 App.init)。而且,如何设置 App.test 的值而不暴露它?
通过公开它,我的意思是可以在 IIFE 之外访问(即:浏览器的控制台)
提前致谢!
你的App.test
属性和那个匿名函数中的局部变量test
不一样。它只是您调用 App.init()
.
在任何对象上,代码通常可以随意创建属性,所以你也可以这样做
App.favoriteColor = "blue";
现在,如果您要做的是将 test
变量作为私有数据存储保存在闭包中,那么您的 init()
函数应该直接引用它而不是引用 "App" 对象的 属性:
var init = function() {
test = 'test';
}
一旦你 运行 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
};
})();