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

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

setTimeout循環傳入第三個參數,真的是閉包的實現嗎?

setTimeout循環傳入第三個參數,真的是閉包的實現嗎?

幕布斯6054654 2019-03-28 22:15:14
function fn1(){for(var i=0;i<4;i++){    var tc=setTimeout(function(i){        console.log(i);        clearTimeout(tc)    },10,i);}}fn1()為什么會說這個考察了閉包的理解呢?哪部分是閉包?函數的外部調用函數內部的變量,可是這里的閉包怎么體現這個概念呢?
查看完整描述

3 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

本來寫法:


function fn1(){


    for(var i=0;i<4;i++){

        var tc=setTimeout(function(){

            console.log(i);

            clearTimeout(tc)

        },10);

    }

}

fn1()

定時器回調函數里的i是fn1函數里for循環的i。fn1函數執行完畢,定時器回調函數還保留著對fn1函數的變量對象的引用。

結果:一次性輸出4。


你問題里的寫法:

每次 for 循環的i作為參數實時傳給了定時器回調函數,這樣就沒有閉包什么事了~~


查看完整回答
反對 回復 2019-04-07
  • 3 回答
  • 0 關注
  • 561 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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