Javascript 访问IIFE中的变量
我试图学习模块模式,我遇到过这样一个场景:iLife和访问内部变量Javascript 访问IIFE中的变量,javascript,iife,Javascript,Iife,我试图学习模块模式,我遇到过这样一个场景:iLife和访问内部变量 var foo = (function () { var bar = false; function switchbar () { if(bar){ bar = false} else { bar = true } ; }; function show { switchbar(); console.log(bar) }; function n
var foo = (function () {
var bar = false;
function switchbar () {
if(bar){ bar = false} else { bar = true } ;
};
function show {
switchbar();
console.log(bar)
};
function noshow {
switchbar();
console.log(bar)
};
return {
showTheBar: show,
hideTheBar: noshow,
whatIsBar: bar
}
}());
foo.showTheBar() //true
foo.whatIsBar //false --> should be true
为什么在最后一次输出中bar不是真的?任何见解都会有很大帮助。提前谢谢 执行foo IIFE时,
bar
的值分配给变量whatIsBar
。此新变量不再与原始条的值相关
因此,无论bar
更改为什么,它都不会影响whatIsBar
。这是一个完全不同的变量 您在返回值中将bar
的值指定给whatIsBar
(false
)时,当您在foo
中更改变量值时,它不会自动更改。如果switchbar
方法未定义,则仅切换bar
foo.whatIsBar
为false不是因为属性未定义,而是因为您没有切换其布尔值。谢谢。我将whatIsBar更改为函数(){returnbar},并且我能够访问它。