function falling()
{
isFalling = true;
while (isFalling == true)
{
if (y < 120) {
y++;
}
else if (y == 120) {
isFalling = false;
}
}
}
我尝试在整个循环周围添加setTimeout(function(),围绕if语句,围绕y ++。我不知道我做错了什么。任何时候我添加其中任何一个页面变得没有响应一次调用下降函数。我很清楚这可能是一个重复的问题,但重复的问题没有帮助。 {},100)
答案 0 :(得分:1)
你会这样做:
function falling(y) {
if (y < 120) {
setTimeout(falling.bind(this, y + 1), 100); // specify your delay.
}
}
falling(0);
这个问题确实得到了多次回答,answers here与此并没有什么不同。
请注意,我删除了明显的全局变量isFalling
。如果您确实需要在其他代码中使用该变量,那么您可以按如下方式更新该变量:
function falling(y) {
isFalling = y < 120;
if (isFalling) {
setTimeout(falling.bind(this, y + 1), 100); // specify your delay.
}
}
答案 1 :(得分:0)
我会改用window.setInterval(),因为你希望它重复到一定数量
work plunkr:
https://plnkr.co/edit/TbpplnIShiaJR7sHDUjP?p=preview
function falling()
{
var isFalling = true;
var y=0;
myInterval = window.setInterval(function() {
y++;
console.log(y);
if (y== 120) {
clearInterval(myInterval);
}
}, 100)
}
falling();
答案 2 :(得分:0)
如果调用下降()的意图是暂时将全局变量的值设置为 true (如当前代码所示),那么这应该做诀窍。
var isFalling = false;
function falling(fallDuration) {
isFalling = true;
console.log("now falling");
setTimeout(function(){
isFalling = false;
console.log("landed");
}, fallDuration || 1000);
}
falling();
我想你可能实际上想要坠落然后继续做其他事情。在这种情况下,您可能希望查看回调或承诺。你可能会做一个简单的事情:
var isFalling = false;
function falling(fallDuration, andThen) {
isFalling = true;
console.log("now falling");
setTimeout(function() {
isFalling = false;
console.log("landed");
andThen();
}, fallDuration);
}
falling(1000, function(){ console.log("now standing"); });