私は基本的に次のことを達成しようとしています。ページが読み込まれてから5秒後に、変数がtrueに設定されるようにします。
真になると、今のところアラートに「真」を与えることに進みます。誰かが5秒前にボタンをクリックしようとすると、アラートはfalseになります。
私は基本的に次のことを達成しようとしています。ページが読み込まれてから5秒後に、変数がtrueに設定されるようにします。
真になると、今のところアラートに「真」を与えることに進みます。誰かが5秒前にボタンをクリックしようとすると、アラートはfalseになります。
あなたは正しい考えを持っていますが、可変スコープに関する小さな問題があります。setTimeout頭痛の種を減らすには、文字列評価オプションを使用せずに(Web全体のチュートリアルで示されています)、無名関数を使用するのが本当に最善です。
var link;
function loading(){
setTimeout(function(){
link = true;
}, 5000);
}
このようにして、どこlinkで宣言されているかを正確に知ることができ、スコープは非常に明確です。
これを試して:
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の記事をご覧ください。
単純なワンライナータイムアウト:
setTimeout(() => alert("Time is up!"), 1000);
明らかに、次の範囲内で任意のコードを実行できます。
let seconds = 5;
let timer = setInterval(() => console.log(`${seconds--} seconds left`), 1000);
setTimeout(() => {
clearInterval(timer);
console.log('')
}, 5999);