Javascript 访问IIFE中的变量

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

我试图学习模块模式,我遇到过这样一个场景:iLife和访问内部变量

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},并且我能够访问它。