为什么这个有条件的工作?

时间:2017-08-09 19:18:00

标签: javascript function conditional

这是否有条件的工作:

    function play(){
    if (typeof gameInterval != "undefined")
        clearInterval(gameInterval);
        gameInterval = setInterval(gameLoop, 100);
        allowPressKeys = true;
}

变量gameInterval仅在此函数内定义,没有全局变量。  因此,当调用play()时,gameInterval是未定义的。由于这个条件在gameInterval未定义时会有所作为,我不明白为什么它有效。谁能解释一下?我试图理解这一点,以便我可以在我的代码中稍后操作它。

4 个答案:

答案 0 :(得分:3)

由于缺少if块周围的花括号,因此只有条件执行if之后的第一个语句。你的缩进混淆了这个问题。你真的是这样做的:

function play() {
    if (typeof gameInterval != "undefined") 
        clearInterval(gameInterval);
    gameInterval = setInterval(gameLoop, 100);
    allowPressKeys = true;
}
声明:

gameInterval = setInterval(gameLoop, 100);
总是执行

;

你可能的意思是:

function play() {
    if (typeof gameInterval != "undefined") {
        clearInterval(gameInterval);
        gameInterval = setInterval(gameLoop, 100);
        allowPressKeys = true;
    }
}

答案 1 :(得分:1)

满足条件时唯一发生的事情是:

clearInterval(gameInterval);

接下来的两行:

gameInterval = setInterval(gameLoop, 100);
allowPressKeys = true;

总是被执行。

像这样格式化代码可以更容易理解:

function play(){
    if (typeof gameInterval != "undefined") {
        clearInterval(gameInterval);
    }
    gameInterval = setInterval(gameLoop, 100);
    allowPressKeys = true;
}

答案 2 :(得分:0)

我假设您要将此与未定义的值进行比较? gameInterval !== undefined(没有引号)可能就是你要找的东西。

https://www.w3schools.com/Jsref/jsref_undefined.asp

答案 3 :(得分:0)

你没有在任何地方声明变量,因此它在全局范围内声明,因此typeof!=“undefined”

id = models.AutoField(primary_key=True)

总是被调用,因为它超出了if范围,这就是它正常工作的方式

gameInterval = setInterval(gameLoop, 100);

也尝试运行此

if(typeof a =="undefined"){
  var a=5;
  console.log('OK');
}