<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      js定時器

      一.定時器

      1. JS存在兩種定時器

      setTimeout() 延遲定時器
      setInterval() 循環定時器(“間隔器”)

      定時器中的函數掛載在window對象,內部的this ——> window

      setTimerout(function(){
      	console.log('wuwei')
      },1000);   // 一秒后打印wuwei
      setInterval(function(){
      	console.log('wuwei')
      },1000);   // 每隔一秒就打印wuwei,如果不清楚或關閉頁面,將會無限循環下去
      

      2. 清除定時器

      在每次使用定時器時,都必須清除定時器

      如何清除定時器呢,每一個定時器開啟后都會返回一個對應的id,說白了就是js里面的第幾個定時器,通過這個id就可以清除定時器,清除定時器用如下的方法

      clearTimeout(timer) ==> 用于清除setTimeout
      clearInterval(timer) ==> 用于清除setInterval

      // 在開啟定時器的同時定義一個變量接受定時器返回的id,用于清除定時器
      // 清除setTimeout
      var timer = setTimeout(function(){
      	console.log('wuwei')
      },2000)
      clearTimerout(timer);
      // 清除setInterval
      var timer2 = setInterval(function(){
      	console.log('wuwei')
      },2000)
      clearTimerout(timer2);
      

      3.關于定時器函數的參數

      定時器接受多個參數

      第一個參數是執行的函數,必須傳遞,不傳沒什么意義,不傳報錯
      第二個為定時器執行的毫秒數,可以不傳,不會報錯,感覺起來是立即執行,其實不是
      第三個之后的所有參數,都將是第一個參數函數執行的實參

      // 省略第二個參數會立即執行
      setTimeout(function(){
      	console.log('無為')
      })
      // 第三個以后的參數是第一個參數函數執行時的實參
      setTimeout(function(,a,b){
      	console.log(a,b)
      },2000,10,20);
      

      HTML5標準規定了setTimeout()的第二個參數的最小值(最短間隔),不得低于4毫秒,如果低于這個值,就會自動增加。在此之前,老版本的瀏覽器都將最短間隔設為10毫秒。不同的瀏覽器實現不同

      4. 關于定時器的第一個參數

      定時器的第一個參數可以是多種形式

      4.1 匿名函數

      setTimeout(function(){
      	console.log('無為')
      },2000)
      

      4.2 有名函數

      setTimeout(function haha(){
      	console.log('無為')
      },2000)
      

      4.3 有名函數的函數名

      function haha(){
      	console.log('wuwei');
      }
      setTimeout(haha,2000)
      

      4.4 能被當成js語句執行的字符串

      setTimeout('console.log("hahah")',2000)
      

      二.JS的單線程

      1. 什么是單線程

      同時只能執行一個任務,如果后面有任務,需要等到當前任務執行完畢,才能執行后面的任務

      for(var i = 0; i< 10000;i++){
      	console.log(1);
      }
      console.log(2);
      

      js的是單線程的也就是說上面的代碼,無論for循環多么耗時,都必須先執行完,在打印2,這就會造成線程阻塞的問題

      2. 什么叫線程阻塞

      前面的任務死循環或者耗時過長導致后面代碼不能被執行,這種情況叫做線程阻塞,

      這樣就會出現問題,所以對于像事件,定時器,ajax請求這種非常耗時的程序.瀏覽器就會開辟其他的線程來處理,所以這些程序我們叫他異步程序

      瀏覽器有三個常駐線程,JS引擎線程,界面的渲染線程,以及瀏覽器事件觸發線程,還有一些執行完就終止的線程,比如HTTP請求線程

      在看一個例子:

      for(var i = 0; i< 5; i++){
      	setTimeout(function(){
      		console.log(i)
      	},1000)
      }
      // 打印幾
      

      3. 同步任務和異步任務

      js的單線程意味著所有的任務需要排隊,前一個任務結束,才會執行后一個任務。如果前一個任務耗時很長,后一個任務就不得不一直等著。

      所以JS的任務隊列分成兩種,同步任務,和異步任務
      
      同步任務:在JS主線程排隊執行的任務
      ? => 形成執行棧
      
      異步任務:不進入主線程進入”任務隊列”的任務
      ? => 形成任務隊列
      

      異步任務只有任務隊列通知主線程,某個異步任務可以執行了,該任務才會進入主線程執行

      所以下面的程序定時器會后執行

      setTimeout(function(){
      	console.log(1)
      },0)
      for(var i = 0; i< 10000;i++){
      	console.log(2)
      }
      

      定時器會等待for循環執行完畢后在執行.

      4. JS代碼的執行順序

      先執行主程序的任務,當主程序的所有任務都執行結束,再把任務隊列中的任務放到主程序中執行

      所有同步任務都在主線程上執行,形成一個執行棧。
      主線程之外,還存在一個”任務隊列”。只要異步任務有了運行結果,就在”任務隊列”之中放置一個事件。
      一旦”執行棧”中的所有同步任務執行完畢,系統就會讀取”任務隊列”,看看里面有哪些事件。那些對應的異步任務,于是結束等待狀態,進入執行棧,開始執行。
      主線程不斷重復上面的第三步。

      5. JS中的異步任務有哪些???

      定時器
      事件
      Ajax

      posted @ 2024-06-28 20:39  二價亞鐵  閱讀(504)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 起碰免费公开97在线视频| 办公室强奷漂亮少妇视频| 亚洲人成网站在线观看播放不卡| 天干天干天啪啪夜爽爽99| av午夜福利一片看久久| 日韩三级一区二区在线看| 国产精品成人中文字幕| 欧美videos粗暴| 青青青爽在线视频观看| 久久亚洲国产欧洲精品一| 亚洲高清免费在线观看| 狠狠色丁香婷婷久久综合五月 | 亚洲色成人一区二区三区| 国语精品自产拍在线观看网站| 图片区 小说区 区 亚洲五月| 在线 欧美 中文 亚洲 精品| 忘忧草在线社区www中国中文| 亚洲第一福利网站在线| 久久66热人妻偷产精品| 青青草国产精品一区二区| 女同另类激情在线三区| 狠狠色噜噜狠狠狠狠777米奇| 国产综合精品一区二区在线| 国产一区二区四区不卡| 亚洲av成人免费在线| 怀来县| 狠狠色噜噜狠狠狠777米奇小说| 不卡高清AV手机在线观看| 亚洲人妻一区二区精品| 亚洲熟女乱色综一区二区| 日韩有码中文在线观看| 99精品全国免费观看视频| 无码AV中文字幕久久专区| 国产美女高潮流白浆视频| 91偷自国产一区二区三区| 国产69精品久久久久777| 欧美日韩欧美| 91超碰在线精品| 亚亚洲视频一区二区三区| 成人无码潮喷在线观看| 国产中文字幕在线精品|