繁体   English   中英

为什么 Javascript 在运行后会更改 function 的输入?

[英]Why Javascript changes inputs of a function after running it?

我有一个在 javascript 中运行的应用程序(游戏)。 I used to code Flash games, (and also C++ and Java years ago), so I am using the canvas to run the game in javascript. 关于 javascript 如何“不同”地工作,我学到了很多“有趣”的东西,但我遇到了一个我无法理解的问题,也无法在网上找到任何原因。

Javascript 将运行 function 然后(似乎)任意决定将输入更改为 0。我说是任意的,因为这个函数在上个月运行得很好,直到今天才决定采取奇怪的行动。 function 正确触发,然后立即将触发它的输入更改为 0,并运行 function 中的所有代码行。 我不明白这是怎么发生的,我在代码中所做的任何更改都不会影响结果。 我发现的唯一解决方案是删除 function 并使用一些不同的风格编写一个新的......这种方法不是最好的方法。 有任何想法吗? 另外,这是我的第一个问题,所以我不知道正确的提问格式。 我的代码长达数千行,并且被调用的 function 是孤立的,所以没关系。

如果重要的话,frameEarring、policeAmount、stoleJewelry 是公共变量。 function 触发是因为 earringFrame > 0,但是... howCanThisLogicallyEqualZero = 0,getValueOfItem(howCanThisLogicallyEqualZero) = 0,policeAmount += 0,setDanger(50) = 50。

这是代码

if (frameEarring > 0) { 
    let howCanThisLogicallyEqualZero = frameEarring;    
    getValueOfItem(howCanThisLogicallyEqualZero);
    policeAmount += howCanThisLogicallyEqualZero * 10;
    frameEarring = 0, setDanger(50);
    stoleJewelry = true; //adds message to phone
}

这是在 chrome96 中运行并显示的游戏的图像

在控制台中运行的实际代码,chrome 96

那应该是不可能的。 chrome 调试器可能会在这里混淆。 有时开发人员工具会做一些奇怪的事情,尤其是在涉及转译和源映射时。

在条件检查之前添加一些日志记录,例如console.log('frameEarring before check', frameEarring) ,并在条件分支内console.log('frameEarring is greater than zero', frameEarring) 我打赌你会看到你期望的值。

如果没有可重现的示例或对您的构建过程的理解,我无法告诉您为什么您的调试器会这样做。


最后,我会避免逗号运算符

frameEarring = 0, setDanger(50);

如果我是你。 无论如何,您可能打算在此处使用分号,这会更有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM