我希望将所有内容保存在一个函数中,而不是将所有各种变量都设置为全局变量。
是否可以在函数main中设置一个事件监听器来监视全局var?
在这个例子中,当索引被改变时调用doTheStuff()?或者我可能会以错误的方式解决这个问题?
var index = 0;
function main(data, data, data, data, data, data,)
{
function one(){ two() }
function two(){ three() }
function three(){ }
function doTheStuff(){ }
}
答案 0 :(得分: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
可能在间隔之间多次更改;这是否重要取决于你想要做什么。
展望未来,您将能够使用属性上的getter和setter(新ECMAScript 5规范的一部分)来实现此目的,但这仍未得到广泛实施。有些浏览器确实实现了它们,虽然它们有自己的语法,但其他浏览器还没有实现它们。
答案 1 :(得分:0)
如果您不拥有index
,则无法以跨浏览器方式执行此操作。如果您拥有index
,则可以设置get / set函数来处理其值。
如果您不需要跨浏览器工作,可以在Firefox,Safari 3 +,Opera 9.5中使用 Getters and Setters 。