0

我正在使用 HTML 画布编写一个简单的游戏并使用 JavaScript 对其进行编辑。我有几个在画布上绘制东西的函数,所有这些函数都使用单个 setInterval 循环。然而,其中一些函数需要有一个局部变量,该变量包含该函数的某个属性(准确地说,一个切换,一个函数是否为“xx”),并且由于这些函数中有很多,存储这个全局窗口中的变量是非常不实用的。

有没有一种方法可以在此函数中定义变量(或属性),而无需在每个循环中都重置此变量?

所以在代码中我有:

var DoSomething = function(){
var xx = new Boolean
[...]
if (condition) { xx = false}
if (condition) { xx = true}
}

并且全部在主循环中执行:

var gameLoop = function(){
DoSomething()
OtherFunctions()
}

var startGame = function(){
setInterval(gameLoop,10)
}

startGame()

就像我说的,在全局窗口中定义是非常不切实际的,因为这个属性/变量xx有很多函数。xx但是现在,循环xx在循环开始时不断重置。有没有办法在这里定义局部变量,而不用 setInterval 的每个循环来重置它?

4

1 回答 1

1

通过将代码包装在一个函数中,该函数中的所有内容都会对世界其他地方隐藏起来。所以现在你可以在你的函数之外声明变量,它们将保持私有并且只能由你的程序访问。

(function() {
    var xx = new Boolean,
        loop;

    var DoSomething = function() {
      // xx will now keep it's state
        if (condition) { xx = false; }
    }

    var gameLoop = function() {
        DoSomething();
        OtherFunctions();
    }

    var startGame = function() {
        loop = setInterval(gameLoop, 10);
    }
}());

最后的额外括号使函数立即调用自身,因此一旦加载脚本,函数就会运行

e.g function() {<code>}()

我建议阅读原型继承并使用它来创建类来表示游戏中的对象。这是在 javascript 中开始使用 OOP 的好方法。

https://developer.mozilla.org/en-US/docs/JavaScript/Introduction_to_Object-Oriented_JavaScript

还要阅读闭包以更好地理解上述示例的工作原理。JavaScript 闭包是如何工作的?

于 2013-01-01T14:17:51.273 回答