第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

關(guān)鍵字'this'可以用來引用javascript中定時器內(nèi)部的setInterval方法嗎

關(guān)鍵字'this'可以用來引用javascript中定時器內(nèi)部的setInterval方法嗎

海綿寶寶撒 2023-07-29 14:57:24
我已經(jīng)知道setIntervaljavascript中的函數(shù)每隔固定的時間重復(fù)執(zhí)行一個函數(shù)或一段代碼。我已經(jīng)知道它的語法如下:setInterval(func|code, [delay], [arg1], [arg2], ...)我的問題是:我可以使用關(guān)鍵字“this”作為參數(shù)來引用計時器 ID(我的例子中的所有參數(shù)都作為外部回調(diào)函數(shù)的參數(shù)傳遞)?提前致謝。
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗 獲得超8個贊

在創(chuàng)建計時器之前,您不能直接傳遞計時器的 ID。問題是你必須調(diào)用 setInterval才能獲取 ID,然后才能將其實際傳遞給被調(diào)用的函數(shù):


let timerId = setInterval(function() {}, 1000, timerId); 
//error - we are using `timerId` before its declaration is finished

傳遞一個對象

但是,您可以利用對象在共享相同引用的情況下工作的方式。因此,您可以初始化一個對象,這意味著該變量存在,然后調(diào)用setInterval并將計時器ID記錄為該對象的屬性。然后將該對象作為參數(shù)傳遞給回調(diào)。當(dāng)回調(diào)執(zhí)行時,對象屬性肯定會被填充,您可以只使用其中的值:


let cb;


{ //callback in one scope

  

  //simple counter that stops at zero

  let i = 3;

  cb = timerContext => {

    console.log(i--);

    if (i < 0) {

      console.log("finish");

      clearInterval(timerContext.timerId);

    }

  }

}



{//start the timer in a different scope

  let context = { timerId: null };

  

  context.timerId = setInterval(cb, 1000, context);

}

創(chuàng)建一個包裝器

或者,如果您在調(diào)用 setInterval 時為其創(chuàng)建包裝函數(shù),則只能向外部回調(diào)傳遞計時器 ID:


let cb;


{ //callback in one scope

  

  //simple counter that stops at zero

  let i = 3;

  cb = timerId => {

    console.log(i--);

    if (i < 0) {

      console.log("finish");

      clearInterval(timerId);

    }

  }

}



{//start the timer in a different scope

  let timerId = setInterval(() => cb(timerId), 1000);

}

傳遞為this

this如果您愿意,如果您的回調(diào)是普通函數(shù),則可以以任一方式將計時器 ID 作為上下文傳遞:

目的

let cb;


{ //callback in one scope

  

  //simple counter that stops at zero

  let i = 3;

  cb = function() {

    console.log(i--);

    if (i < 0) {

      console.log("finish");

      clearInterval(this.timerId);

    }

  }

}



{//start the timer in a different scope

  let context = { timerId: null };

  

  context.timerId = setInterval(cb.bind(context), 1000);

}

只要身份證號

let cb;


{ //callback in one scope

  

  //simple counter that stops at zero

  let i = 3;

  cb = function() {

    console.log(i--);

    if (i < 0) {

      console.log("finish");

      clearInterval(this);

    }

  }

}



{//start the timer in a different scope

  let timerId = setInterval(() => cb.call(timerId), 1000);

}


查看完整回答
反對 回復(fù) 2023-07-29
  • 1 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號