6

我基本上是在尝试完成以下工作。我希望在页面加载后 5 秒,它将变量设置为 true。

一旦为真,它将继续给出警报“真”..现在。如果有人试图在 5 秒之前点击按钮,它会给出错误的警报。

4

3 回答 3

10

您的想法是正确的,但是您对变量范围有一个小问题。为了减少头痛,最好不要使用字符串 eval 选项setTimeout(我知道,这在网络上的教程中都有显示)并使用匿名函数:

var link;
function loading(){
    setTimeout(function(){ 
        link = true; 
    }, 5000);
}

这样,您将确切知道link声明的位置并且范围非常清晰。

于 2009-11-16T07:34:42.753 回答
9

尝试这个:

setTimeout(function() { window.link = true; }, 5000);

这将在 5 秒后将全局变量“link”设置为 true,这将满足您的 if 语句。

编辑 如果您是初学者,这可能有点复杂,但更好的方法是使用函数范围而不是全局范围。

在您的情况下,像这样声明计时器函数:

var timer = (function () {
    var link = false;
    setTimeout(function() { link = true; }, 5000);

    return function() {
        alert(link);
    };
}());

这样,匿名函数返回另一个成为 timer() 的函数,但是这样 timer 可以访问它的“私有”链接变量。有关更多信息,请查看Mozilla 关于 JavaScript 变量范围的文章

于 2009-11-16T07:29:06.127 回答
0

简单的单行超时:

setTimeout(() => alert("Time is up!"), 1000);

您显然可以在以下范围内执行任何代码:

let seconds = 5;
let timer = setInterval(() => console.log(`${seconds--} seconds left`), 1000);

setTimeout(() => {
  clearInterval(timer);
  console.log('')
}, 5999);

于 2020-01-04T12:45:16.523 回答