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

資訊專欄INFORMATION COLUMN

從一個for循環(huán)分析JS的事件處理機制

rollback / 400人閱讀

摘要:最近面試的時候,經(jīng)常會遇到這類問題,比如你怎么理解的事件處理機制什么任務優(yōu)先級高,什么任務會在主進程中我覺得從一個例子出發(fā)可以很好的從各方面的去分析,這樣也會是一個比較滿意的答案常見的例子這里我們?nèi)绻蝗ニ伎家幌潞苋菀椎贸鲞@類答案,仔細思

最近面試的時候,經(jīng)常會遇到這類問題,比如:你怎么理解JS的事件處理機制?什么任務優(yōu)先級高,什么任務會在主進程中?

   我覺得從一個例子出發(fā)可以很好的從各方面的去分析,這樣也會是一個比較滿意的答案
   常見的例子:
               for(var i = 0; i<10; i++) {
                   setTimeout(()=>{
                       console.log(i)
                   },0)
               }
         這里我們?nèi)绻蝗ニ伎家幌潞苋菀椎贸?0-9 這類答案,仔細思考就會發(fā)現(xiàn)這里輸出的是10次10 
         這里我們可以先從JS的處理機制先說起,在JS的處理機制里 同步最高>異步>回調(diào)函數(shù)
         
         那么這里我們就很容易理解了,那在執(zhí)行中順序就是,先執(zhí)行完同步代碼for循環(huán),然后在0ms后執(zhí)行異步代碼setTimeout。
         因為在執(zhí)行的時候setTimeout函數(shù)會去找i這個變量,但是由于i在for里面執(zhí)行完之后已經(jīng)變?yōu)?0,由于是var聲明對于settimeout而言是全局變量,所以打印了10次10
         那如果需要實現(xiàn)打印0-9的話呢?
         
         第一種方法:使用ES6中的let 很容去解決作用域的問題
         如果只用ES5的方法呢,我們可以用這樣實現(xiàn)
         for(var i = 0; i<10; i++) {
             (function(i){
              setTimeout(()=>{
                       console.log(i)
                   },0)
             })(i)                      
            }
         
         在這里去執(zhí)行**立即執(zhí)行函數(shù)**,它會迫使每次進入循環(huán)之前都會立即去執(zhí)行代碼,從而保證得到i都是不一樣的

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

轉載請注明本文地址:http://systransis.cn/yun/105133.html

相關文章

  • 由setTimeout深入JavaScript執(zhí)行環(huán)境異步機制

    摘要:圖片轉引自的演講和兩個定時器中回調(diào)的執(zhí)行邏輯便是典型的機制。異步編程關于異步編程我的理解是,在執(zhí)行環(huán)境所提供的異步機制之上,在應用編碼層面上實現(xiàn)整體流程控制的異步風格。 問題背景 在一次開發(fā)任務中,需要實現(xiàn)如下一個餅狀圖動畫,基于canvas進行繪圖,但由于對于JS運行環(huán)境中異步機制的不了解,所以遇到了一個棘手的問題,始終無法解決,之后在與同事交流之后才恍然大悟。問題的根節(jié)在于經(jīng)典的J...

    codeGoogle 評論0 收藏0
  • 前端校招準備系列--jssetTimeout到底是什么?

    摘要:瀏覽器是多進程的,而瀏覽器的內(nèi)核渲染進程是多線程的。如果已經(jīng)將回調(diào)函數(shù)放進任務隊列,但是主線程正在執(zhí)行一個非常耗時的任務,當這個任務執(zhí)行完畢后,主線程去任務隊列中取任務,這個時候,就會出現(xiàn)連續(xù)執(zhí)行的情況,也就是說相當于失效了。 前言 ??在刷筆試題的時候,經(jīng)常會碰到setTimeout的問題,只知道這個是設置定時器;但是考察的重點一般是在一個方法中包含了定時器,定時器中的打印和方法中打...

    Godtoy 評論0 收藏0
  • JavaScript執(zhí)行機制事件循環(huán)

    摘要:曾經(jīng)的理解首先,是單線程語言,也就意味著同一個時間只能做一件事,那么為什么不是多線程呢這樣還能提高效率啊假定同時有兩個線程,一個線程在某個節(jié)點上編輯了內(nèi)容,而另一個線程刪除了這個節(jié)點,這時瀏覽器就很懵逼了,到底以執(zhí)行哪個操作呢所以,設計者把 Event Loop曾經(jīng)的理解 首先,JS是單線程語言,也就意味著同一個時間只能做一件事,那么 為什么JavaScript不是多線程呢?這樣還能提...

    rose 評論0 收藏0
  • 前端性能優(yōu)化指南

    摘要:前端性能優(yōu)化指南優(yōu)化緩存異步并不等于即時。操作性能問題主要有以下原因。發(fā)生在之前,所以相對來說會造成更多性能損耗。新引擎還對對象屬性訪問做了優(yōu)化,解決方案叫,簡稱。代價是前置的掃描類型編譯優(yōu)化。數(shù)組,,閉包變量不在優(yōu)化范疇之列。 前端性能優(yōu)化指南 AJAX優(yōu)化 緩存AJAX: 異步并不等于即時。 請求使用GET: 當使用XMLHttpRequest時,而URL長度不到2K...

    Pink 評論0 收藏0
  • Javascript事件循環(huán)入門到“忘記”(一).md

    摘要:中叫做調(diào)用棧先進后出,后進先出。如下圖這是典型的內(nèi)存溢出,可能會出現(xiàn)在某些場景下需要遞歸,但業(yè)務邏輯中的判斷又沒能正常計算進入到預設情況,于是調(diào)用棧中不斷進入,又無法執(zhí)行完,就造成內(nèi)存溢出了。 本文主要介紹Javascript事件循環(huán)在瀏覽器上的一些特性和應用介紹。 Javascript小知識 JavaScript的并發(fā)模型基于事件循環(huán)(Event Loop)。這個模型與像C或者Jav...

    codeGoogle 評論0 收藏0

發(fā)表評論

0條評論

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