• <td id="ueojn"></td>

      <blockquote id="ueojn"><ruby id="ueojn"></ruby></blockquote>
            <output id="ueojn"><ruby id="ueojn"><address id="ueojn"></address></ruby></output><code id="ueojn"></code>
            北京网站建设>建站知识>开发小记>

            开发小记

            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。

            闭包

            那么怎么?#21738;兀?#35828;说最常见的改法就是使用闭包。

            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);
            }
            

            由于?#30475;未?#20837;的参数是从for循环里面取到的值,所以会?#26469;?#36755;出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));
            

            最后?#26469;?#36755;出为 第一次0 第二次1

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

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

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

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

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

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

            AM 09:00 ~ 12:00

            PM 14:00 ~ 18:00

            联系方式:

            Tel 010-50933590

            Hp 18701620736

            设计优势

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

            功能开发

            ?#30475;?#30340;技术实力,完成您想要的任何功能

            售后服务

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

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

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

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

            山东十一选五走势图