【发布时间】:2018-10-12 16:51:38
【问题描述】:
这里最相关的答案不是指块作用域的let,而是提升的var。我似乎无法得到一个明确的答案。
我有一个全局声明的变量,它初始化一次:
let firePaused = false;
然后是每次我按下按钮时都会运行的键盘处理程序中的一个函数:
function actOnKeyPress() {
if (rightPressed) {
game.hero.rotate(game.hero.speed);
} else if (leftPressed) {
game.hero.rotate(-game.hero.speed);
}
if (!firePressed) {
firePaused = false;
}
if (firePressed && options.numberOfBullets > 0) {
if (!firePaused) {
fireBullet();
firePaused = true;
}
}
}
(与问题无关,但其目的是只允许玩家开火一次,需要有一个 keyup 事件才能再次开火)
根据干净代码的规则,我应该在函数顶部声明变量...但这意味着每次我按下按钮时都会重新声明它。
这里写着https://www.sitepoint.com/how-to-declare-variables-javascript/
初始化:当你声明一个变量时,它会自动 初始化,这意味着内存被分配给变量 JavaScript 引擎。
所以每次使用 let 关键字时,我都会创建一个全新的变量。
我是否应该在函数的开头写一个条件来检查firePaused是否已经声明,如果没有声明它?这似乎太过分了。
【问题讨论】:
-
您似乎有一个全局变量
game。game.state.firePaused呢?这样,如果您将所有与游戏状态相关的变量都放在那里,您甚至可以轻松保存游戏。 -
是否可以返回 true 或 false 而不是设置变量?
-
那个 Sitepoint 注释充其量是误导,在我看来它完全是错误的。