成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js閉包結(jié)合定時器的題目詳解(面試題之一)

chaos_G / 2408人閱讀

摘要:學習過程中遇到這樣一個題目,第一眼看很懵逼,第二眼也懵逼,第三眼更懵逼,大家可以發(fā)動你的想象力猜一猜正確答案是多少,反正我是沒猜對。

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

學習過程中遇到這樣一個題目,第一眼看很懵逼,第二眼也懵逼,第三眼更懵逼,大家可以發(fā)動你的想象力猜一猜正確答案是多少,反正我是沒猜對。

接下來,我分享一下我順著答案,猜過程的調(diào)試過程吧,順便揭曉一下答案

fn1()//0,1,2
fn2()//0,1,2,3,3,3,3,3,...全是3

為毛是這樣的結(jié)果呢,大家對比一下兩個函數(shù)有什么不同,仔細看發(fā)現(xiàn)兩點

一個是setTimeout,一個是setInterval,這個區(qū)別導致后面結(jié)果中,最后一輸出3

定時器后面的參數(shù)不一樣,setInterval多一個tc參數(shù),并且匿名函數(shù)中接受了這個tc參數(shù)(敲黑板,劃重點?。。。?對定時器傳參不明白的點擊進去看https://developer.mozilla.org...

對fn1函數(shù)稍稍改變一下呢

在定時函數(shù)外面tc能正常打印,但是定時器里面tc一直是最后一個值,這是為什么呢?

如上圖,可以看出函數(shù)執(zhí)行順序,在第一個定時器里的函數(shù)執(zhí)行時,tc變量保存在內(nèi)存中的值是6449,也就是最后一個定時器的id,setTimeout中的函數(shù)每次訪問的便是tc變量內(nèi)存中的6449,所以每次都是清除的最后一個定時器,最后一個定時器還沒執(zhí)行就已經(jīng)被清除了,所以最后打印出0,1,2

希望能輸出0,1,2,3咋辦呢

將tc作為變量傳入,函數(shù)內(nèi)部是允許訪問函數(shù)外部的值的,每一次清除的定時器都是上一次執(zhí)行后的定時器,fn2()也可以同理分析

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/100268.html

相關(guān)文章

  • JavaScript系列(四) - 收藏集 - 掘金

    摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗Х妒?。函?shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。因此,...

    cfanr 評論0 收藏0
  • 一道js閉包面試學習

    摘要:然后最外層這個函數(shù)會返回一個新對象,對象里面有一個屬性,名為,而這個屬性的值是一個匿名函數(shù),它會返回。 最近看到一條有意思的閉包面試題,但是看到原文的解析,我自己覺得有點迷糊,所以自己重新做一下這條題目。 閉包面試題原題 function fun(n, o) { // ① console.log(o); return { // ② fun: function(m) ...

    plus2047 評論0 收藏0
  • javasscript - 收藏集 - 掘金

    摘要:跨域請求詳解從繁至簡前端掘金什么是為什么要用是的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題。異步編程入門道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 jsonp 跨域請求詳解——從繁至簡 - 前端 - 掘金什么是jsonp?為什么要用jsonp?JSONP(JSON with Padding)是JSON的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題...

    Rango 評論0 收藏0
  • 前端20個真正靈魂拷問,吃透這些你就是中級前端工程師 【上篇】

    摘要:還是老規(guī)矩,從易到難吧傳統(tǒng)的定時器,異步編程等。分配對象時,先是在空間中進行分配。內(nèi)存泄漏內(nèi)存泄漏是指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費,導致程序運行速度減慢甚至系統(tǒng)崩潰等嚴重后果。 showImg(https://segmentfault.com/img/bVbwkad?w=1286&h=876); 網(wǎng)上參差不棄的面試題,本文由淺入深,讓你在...

    mdluo 評論0 收藏0
  • 前端20個真正靈魂拷問,吃透這些你就是中級前端工程師 【上篇】

    摘要:還是老規(guī)矩,從易到難吧傳統(tǒng)的定時器,異步編程等。分配對象時,先是在空間中進行分配。內(nèi)存泄漏內(nèi)存泄漏是指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費,導致程序運行速度減慢甚至系統(tǒng)崩潰等嚴重后果。 showImg(https://segmentfault.com/img/bVbwkad?w=1286&h=876); 網(wǎng)上參差不棄的面試題,本文由淺入深,讓你在...

    leap_frog 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<