在 IIFE 中访问变量

Accessing variables within IIFE

我正在尝试学习模块模式,我在使用 IIFE 和访问内部变量时遇到过这种情况。

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的值相关。

所以无论bar改成什么,都不会影响whatIsBar。这是一个完全不同的变量。