<ins id="zzrkj"><option id="zzrkj"><optgroup id="zzrkj"></optgroup></option></ins>

    <output id="zzrkj"></output>

    
    <tbody id="zzrkj"><th id="zzrkj"></th></tbody><mark id="zzrkj"><u id="zzrkj"></u></mark><output id="zzrkj"></output>

  1. <tr id="zzrkj"><small id="zzrkj"><acronym id="zzrkj"></acronym></small></tr>
    1. <tr id="zzrkj"><nobr id="zzrkj"><delect id="zzrkj"></delect></nobr></tr>

      <tr id="zzrkj"><nobr id="zzrkj"><ol id="zzrkj"></ol></nobr></tr>

      <sup id="zzrkj"></sup>
      <sup id="zzrkj"><small id="zzrkj"></small></sup>
      <ins id="zzrkj"><option id="zzrkj"></option></ins>
      北京网站建设>建站知识>开发小记>

      开发小记

      setTimeout的第三个参数你可能不知道的作用

      来源:未知 作者:admin 时间:2019-04-02 17:01 点击:

      说起来你可能不相信,setTimeout居然有第三个参数,我以前也没用过这个,但最近看到一个代码解决了for循环里面加入了setTimeout的例子,下面一起看看这个setTimeout第三个参数。

      for(var i = 0; i<6; i++){
          setTimeout(function(){
              console.log(i);
          },1000);
      }
      

      看到上面的这个for例子,相信很多人都能脱口而出,它会连续输出6次6,因为setTimeout是一个异步操作,而等到执行setTimeout时,for循环已经执行完毕,这时的i已经等于6,所以输出6次的6。

      闭包

      那么怎么改呢?说说最常见的改法就是使用闭包。

      for(var i=0; i<6; i++){
          (function(j){
              setTimeout(function(){
                  console.log(j);
              },j*1000);
          })(i);
      }
      

      通过闭包,将i的变量驻留在内存中,当输出j时,引用的是外部函数A的变量值i,i的值是根据循环来的,执行setTimeout时已经确定了里面的的输出了。

      函数传参

      还有一种就是给setTimeout添加第三个参数。

      for(var i=0;i<6;i++){
          setTimeout(function(j){
              console.log(j);
          },i*1000,i);
      }
      

      由于每次传入的参数是从for循环里面取到的值,所以会依次输出0~5。

      看了上面的代码,相信你对这个setTimeout的第三个参数作用大概了解了,是的,它就是给setTimeout第一个函数的参数。

      翻一下MSDN文档,里面确实有记录setTimeout第三个及后面的参数的。下面我们来看看这个代码

      function sum(x,y,z){
          console.log(x+y+z);
      }
      setTimeout(sum,1000,1,2,3);
      

      上面第二行打印出了6,1+2+3=6(11是setTimeout timeId)。

      可以看出,第三个及以后的参数都可以作为sum函数的参数。

      第三个参数作为函数

      var i=0;
      setTimeout(function(){
          console.log('第二次'+i)
      },3000,setTimeout(function(){
          console.log('第一次'+i);
          i++;
      },1000));
      

      最后依次输出为 第一次0 第二次1

      可以看到第三个参数还可以是先执行,然后再执行函数。

      今天就到这里了,有没有get到这个点,我翻了之前自己写过的关于setTimeout和setInterval的相关文章,都没有谈到第三个参数的,中文的w3c教程也没看到。

      利用好setTimeout的第三个参数,有时候会有意向不到的收获。希望这篇文章对你有所帮助。

      公司业务:北京网站建设刷百度下拉刷百度指数虚拟主机租用

      如转载,请保留本文链接地址:http://www.donnybike.com/Web/Diary/2031/

      Loading......
      工作时间:

      AM 09:00 ~ 12:00

      PM 14:00 ~ 18:00

      联系方式:

      Tel 010-50933590

      Hp 18701620736

      设计优势

      独立的设计团队 带给您全新的视觉体验

      功能开发

      强大的技术实力,完成您想要的任何功能

      售后服务

      完善的售后服务,解决您在使用过程中遇到的问题

      Copyright © 2010 - 2018 北京顺晟科技发展有限公司 All Rights Reserved

      地址:北京市顺义区南法信政府府前街16号 炫立方 | TEL:010-50933590

      北京网站建设 | 北京网站设计 | 北京SEO公司

      香港暴富一肖二马