十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章运用简单易懂的例子给大家介绍JavaScript中setTimeout的参数应用,文章内容步步紧凑,希望大家根据这篇文章可以有所收获。
公司主营业务:成都网站制作、网站建设、外贸网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出江西免费做网站回馈大家。说起setTimeout,各位再熟悉不过,用法也很简单:。
但说起来你可能不信,用了这么多年的setTimeout居然有第三个参数。下面一起看看这个setTimeout第三个参数。
我们先来看一段简单的代码:
setTimeout(function(x) { console.log(x); }, 1000, 1);
控制台输出1,那么能不能继续加参数呢?我们继续来看下面这段代码:
setTimeout(function(x,y) { console.log(x+y); }, 1000, 1, 2);
控制台输出的是3,很显然是第三和第四个参数的和。
看到这里很多小伙伴应该意识到了,是的,setTimeout的第三个参数作用就是给setTimeout第一个函数的参数。
通过查询MDN https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout 我们能看到关于第三个参数的描述:
var timeoutID = scope.setTimeout(function[, delay, arg1, arg2, ...]); var timeoutID = scope.setTimeout(function[, delay]); var timeoutID = scope.setTimeout(code[, delay]);
所以,其实准确来讲,setTimeout可以有无数个参数,只是从第三个参数起,就是了。
好了,知道这个特性后我们可以解决什么问题呢?最经典的一个就是for循环内使用setTimeout了。
for(var i = 0; i<6; i++) { setTimeout(function() { console.log(i); }, 1000); }
上面的这个例子是一个经典的面试题,它会连续输出6次6,因为setTimeout是一个异步操作,而等到执行setTimeout时,for循环已经执行完毕,这时的i已经等于6,所以输出6次的6。关于解决方法我总结了好几种,感兴趣的小伙伴可以看我的上一篇博客《关于for循环中使用setTimeout》,在这篇博客结尾我提到了使用setTimeout第三个参数,那我们再来看看这种方法。
for(var i=0;i<6;i++) { setTimeout(function(j) { console.log(j); }, 1000, i); }
由于每次传入的参数是从for循环里面取到的值,所以会依次输出0~5。这当然还是作用域的问题,但是在这里setTimeout第三个参数却把i的值给保存了下来。这种解决方法比使用闭包轻快的多。
另外,第三个参数也可以作为函数来使用。
for(var i=0;i<6;i++) { setTimeout(function(j) { console.log(j); }, 1000, i); }
最后依次输出为,第一次0、第二次1。
可以看到第三个参数还可以是先执行,然后再执行函数。
最后,使用第三个参数需要注意的一点就是兼容问题,如果需要兼容IE9及以前的版本,需要引入一段MDN提供的兼容旧IE代码 ,这里贴出传送门,感兴趣的可以去看。
下面是MDN上关于兼容性的描述:
Note: Passing additional arguments to the function in the first syntax does not work in Internet Explorer 9 and below. If you want to enable this functionality on that browser, you must use a polyfill (see the Polyfill section).
关于JavaScript中setTimeout的参数应用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。