2014-01-31 49 views
1

除了可讀性,是否有任何理由避免或不使用這種風格編程靜態變量?Javascript static var

function not_global() 
{ 
    var print; 

    (function() { 
     var static = value; 
     print = function(value) { 
      static = value; 
     } 
    })(); 
} 
+0

這是全局性的,這意味着你正在污染全局命名空間。 – zzzzBov

+0

鑑於您在全局名稱空間中聲明變量,這似乎不必要的複雜。 – 2014-01-31 00:17:44

+0

'function foo(){};這裏是一個「靜態」屬性/變量,因爲它只能通過'foo.bar'訪問 –

回答

1

我會避免這種風格。它並不是非常明確,因此如果沒有評論,說明暴露在IIFE之外是有意的。相反,我會建議返回從功能print有分配給它:

var print = (function() 
{ 
    var text_log=document.getElementById('text_log_text'); 

    return function(string) 
    { 
     text_log.innerHTML+='<br />'+string; 
    }; 
})(); 

注意污染全局命名空間不鼓勵,所以真的在這裏最好的答案是隻是沒有print露在外面。這個答案假設你已經考慮過了,而且你的IIFE實際上嵌套在另一個函數中(所以它不會污染全局名稱空間),或者你確實希望print是全局的。

+0

謝謝,我從來沒有想過要返回一個函數 –