2010-09-28 656 views
2

我想將所有內容都包含在一個單一的函數中,而不是讓所有的變量全局化。全局變量的JS監聽器?

是否可以在函數main中設置一個事件監聽器來觀察全局變量?

在這個例子中調用doTheStuff()時索引被改變了嗎?或者我可能會以這種錯誤的方式去做?

var index = 0; 


function main(data, data, data, data, data, data,) 
{ 

function one(){ two() } 

function two(){ three() } 

function three(){ } 

function doTheStuff(){ } 

} 

回答

1

有可能是一個更好的方式去了解這一點,例如:

// An anonymous function to provide scoping 
(function() { 
    var index = 0; // A non-global, but accessible to everything within this scoping function 

    function setIndex(newIndex) { 
     index = newIndex; 
     doTheStuff(); 
    } 

    function one() { two(); } 

    function two() { three(); } 

    function three() { 
     // Perhaps `three` needs to change the index 
     setIndex(index + 1); 
    } 

    function doTheStuff() { } 
})(); 

如果你想要做什麼,不爲工作,你可以設置一個間隔定時器根據保存的副本檢查值。

var index = 0; 
function main(...) { 
    var lastIndex = index; 

    setInterval(checkIndex, 100); // Every 100ms or so 

    function checkIndex() { 

     if (index != lastIndex) { 
      lastIndex = index; 
      doTheStuff(); 
     } 
    } 

    // Other functions omitted... 

} 

這將是可能的index比間隔之間被修改一次以上;無論這個問題是否取決於你想要做什麼。未來,您將可以通過屬性(新ECMAScript 5規範的一部分)上的getter和setter來做到這一點,但這仍未得到廣泛實施。有些瀏覽器確實實現了它們,儘管它們有自己的語法,但其他瀏覽器還沒有。

0

如果你不擁有index你不能用跨瀏覽器的方式。如果您擁有index,您可以使用get/set函數來處理其值。

或者如果你不需要跨瀏覽器工作,你可以在Firefox,Safari 3 +,Opera 9.5中使用Getters and Setters