題目:
如示意圖,用原生的 alert() 在瀏覽器跳出「時間到」的訊息。
如果你是這樣想的,代表你以為你會 JavaScript,但其實你都是在胡搞:
alert('時間到');
至少要這樣才像話:
setTimeout(() => {
alert('時間到');
console.log('timeout');
});
console.log('done');
這樣最接近 alert() 原本的用法:
(async () => {
alert('時間到');
})().then(() => {
console.log('after timeout');
});
如果到現在你還是堅持你真的會 JavaScript,但還是搞不懂為什麼,那代表你會的是某個 JavaScript framework,那不是 JavaScript。
MDN 也這樣提醒了:
可是考試題目就是要用 alert(),所以,就把它改成非同步執行的。
還有件更可怕的事情,就是上面那一段 MDN 的提醒,是放在《全新手請從這開始!》;confirm() 同理:
(async () => {
var a = confirm('確定嗎?');
return a;
})().then((ret) => {
if (ret) {
console.log('confirm');
} else {
console.log('cancel');
}
});
當新手也沒甚麼丟臉的地方,新手才有門可入,就算你是百年難得一件的練武奇才,也得先入門。