6

私は基本的に次のことを達成しようとしています。ページが読み込まれてから5秒後に、変数がtrueに設定されるようにします。

真になると、今のところアラートに「真」を与えることに進みます。誰かが5秒前にボタンをクリックしようとすると、アラートはfalseになります。

4

3 に答える 3

10

あなたは正しい考えを持っていますが、可変スコープに関する小さな問題があります。setTimeout頭痛の種を減らすには、文字列評価オプションを使用せずに(Web全体のチュートリアルで示されています)、無名関数を使用するのが本当に最善です。

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はその「プライベート」リンク変数にアクセスできます。詳細については、JavaScript変数スコープに関するMozillaの記事をご覧ください。

于 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 に答える