Javascript 全局变量的JS侦听器?

Javascript 全局变量的JS侦听器?,javascript,Javascript,我希望将所有内容都包含在一个函数中,而不是将所有变量都设置为全局变量 是否可以在函数main中设置事件侦听器来监视全局变量 在本例中,当索引被更改时调用doTheStuff()?或者我可能走错了方向 var index = 0; function main(data, data, data, data, data, data,) { function one(){ two() } function two(){ three() } function three(){ } functi

我希望将所有内容都包含在一个函数中,而不是将所有变量都设置为全局变量

是否可以在函数main中设置事件侦听器来监视全局变量

在本例中,当索引被更改时调用doTheStuff()?或者我可能走错了方向

var index = 0;


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

function one(){ two() }

function two(){ three() }

function three(){ }

function doTheStuff(){ }

}

可能有更好的方法来解决这个问题,例如:

// 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...

}
索引
可能在间隔之间更改一次以上;这是否重要将取决于你想做什么


今后,您将能够使用属性上的getter和setter(新的ECMAScript 5规范的一部分)实现这一点,但这仍然没有得到广泛的实现。一些浏览器确实实现了它们,尽管它们有自己的语法,但其他浏览器没有(目前)。

如果你没有
索引,你就不能以跨浏览器的方式实现。如果您拥有
索引
,则可以使用get/set函数来处理其值

或者,如果您不需要跨浏览器工作,您可以在Firefox、Safari 3+和Opera 9.5中使用getter和setter