亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一道關于js定時器的《面試題》

一道關于js定時器的《面試題》

精慕HU 2019-03-01 16:43:18
希望能夠詳細的講解下clearTimeout(tc) 為什么就能把最后一個setTimeout給清除?
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

因為js沒有塊級作用域,只有全局作用域和函數作用域。所以,代碼實際上是這樣:

function fn1() {  var ts, i;  for(i = 0; i < 4; i++) {
    tc = setTimeout(function(i) {      console.log(i);
      clearTimeout(ts);
    }, 10, i);
  }
}

而且,for循環先被執行完,才開始執行定時器。所以,不存在各個定時器使用對應的ts臨時值的情況,它們使用的都是ts最終的值。也就是:每個定時器中ts都指向了原fn1函數的ts,而此時ts的值是最后一個定時器,也就是第四個定時器。因此,在第一個定時器執行后,第四個定時器就被清除了。


查看完整回答
反對 回復 2019-03-01
  • 2 回答
  • 0 關注
  • 957 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號