2015-08-20 36 views
0

我需要在我的命名空間中使用「private」和「public」成員的函數,並且想知道內部發生了什麼,因爲我無法回溯變量處理。自執行功能中的內部變量處理

公共變量「publicVar」應直接分配,如:「myNamespace.publicVar = true」。

var myNamespace = (function() { 
    var _privateVar = "not accessible", 
     publicVar = false; 

    function publicFoo() { 
     if (publicVar) { 
      console.log("var is true"); 
     } else { 
      console.log("var is false"); 
     } 
    } 

    return { 
     publicVar: publicVar, 
     publicFoo: publicFoo 
    } 

})(); 

myNamespace.publicFoo();  // output--> var is false 
myNamespace.publicVar = true; 
myNamespace.publicFoo();  // output --> var is false 
myNamespace.publicVar;  // output--> true of course. 

這裏會發生什麼?爲什麼我不能以這種方式更改「public」變量,以便正確使用內部變量? 如果我改變publicFoo()這樣和使用publicVar與「本」,它工作正常:

function publicFoo() { 
     if (this.publicVar) { 
      console.log("var is true"); 
     } else { 
      console.log("var is false"); 
     } 
    } 

但我能避免「本」?還是有更好的方法來處理它?

myNamespace.publicFoo();  // output --> var is false 
myNamespace.publicVar = true; 
myNamespace.publicFoo();  // output --> var is true 

非常感謝您的回答。

回答

1

這是因爲你的時候你說,

myNamespace.publicVar = true;

myNamespace對象創建一個publicVar它不會更新函數內部的變量。

publicVar裏面的函數是局部的,它只對內部函數可見(關閉圖片)