settimeout

这一次,彻底弄懂 JavaScript 执行机制

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-24 20:20:23
3 月,跳不动了?>>> 点点这个链接免费获取: 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 本文的目的就是要保证你彻底弄懂JavaScript的执行机制,如果读完本文还不懂,可以揍我。 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为javascript是一门单线程语言,所以我们可以得出结论: javascript是按照语句出现的顺序执行的 看到这里读者要打人了:我难道不知道js是一行一行执行的?还用你说?稍安勿躁,正因为js是一行一行执行的,所以我们以为js都是这样的: let a = '1' ; console .log(a); let b = '2' ; console .log(b); 然而实际上js是这样的: setTimeout( function () { console .log( '定时器开始啦' ) }); new Promise ( function ( resolve ) { console .log( '马上执行for循环啦' ); for ( var i = 0 ; i < 10000 ; i++){ i == 99 && resolve(); } }).then( function () { console .log(

How can I get all timers in javascript?

随声附和 提交于 2020-03-23 02:22:03
问题 I create different timer with setTimeout() function in different class. I want to know if there is a way to get all timeouts together? 回答1: Not by default, no. You could make your own module that lets you keep track of the timers, and which gives you the list. Roughly : // ES2015+ version const activeTimers = []; exports.setTimeout = (callback, interval, ...timerArgs) => { const handle = setTimeout((...args) => { const index = activeTimers.indexOf(handle); if (index >= 0) { activeTimers

setTimeout in react setState

两盒软妹~` 提交于 2020-03-21 04:36:32
问题 this.setState(prevState => ({ score: prevState.score + 10, rightAnswers: prevState.rightAnswers + 1, currentQuestion: setTimeout(() => { prevState.currentQuestion + 1 }, 2000) })) } On button click I change the state. My goal is to have a delay in currentQuestion state change, during which I want to show certain status messages, yet I want to update the score right away without delays. What's the proper way to do that? PS: This variant doesn't work, it's for the overall representation of what

HTML DOM setTimeout() 方法

馋奶兔 提交于 2020-03-18 04:22:32
转自:http://www.w3school.com.cn/jsref/met_win_settimeout.asp 1.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 1 <html> 2 <head> 3 <script type="text/javascript"> 4 function timedMsg() 5 { 6 var t=setTimeout("alert('5 seconds!')",5000) 7 } 8 </script> 9 </head> 10 11 <body> 12 <form> 13 <input type="button" value="显示计时的消息框!" onClick = "timedMsg()"> 14 </form> 15 <p>点击上面的按钮。5 秒后会显示一个消息框。</p> 16 </body> 17 18 </html> 来源: https://www.cnblogs.com/sharpest/p/6145256.html

JavaScript 进阶(一)JS的\"多线程\"

二次信任 提交于 2020-03-17 17:39:38
这个系列的文章名为“JavaScript 进阶”,内容涉及JS中容易忽略但是很有用的,偏JS底层的,以及复杂项目中的JS的实践。主要来源于我几年的开发过程中遇到的问题。小弟第一次写博客,写的不好的地方请诸位斧正,觉得还有一些阅读价值的请帮忙分享下。这个“JavaScript 进阶”是一个系列文章,请大家鼓励鼓励,我尽快更新。另外,如果你有比较好的话题,也可以在下面评论,我们一起研究提高。 JS是多线程的吗? 多线程编程相信大家都很熟悉,比如在界面开发中,如果一个事件的响应需要较长时间,那么一般做法就是把事件处理程序写在另外一个线程中,在处理过程中,在界面上面显示类似进度条的元素。这样界面就不会卡住,并且能够显示任务执行进度。记得刚开始做前端的时候,老板交代在界面上面做一个定时器,每秒更新用户的在线时间。当时拥有Java和C++开发经验的我自信满满的说我加一个线程就可以分分钟搞定了。所以查阅文档,发现setTimeout和setInterval可以很方便的实现该功能。那时候我就认为这就是JS中的多线程。setTimeout相当于启动一个线程,等待一段时间后执行函数,setInterval则是在另外的一个线程中,每隔一段时间执行函数。这个观念在我的头脑中存在了一年左右,直到遇到了这样的一个问题。 测试人员发现一个按钮的点击响应时间较长,在响应过程中,界面卡住了

定时器

泄露秘密 提交于 2020-03-16 09:01:09
  本篇文章主要分别讲一下setInterval,setTimeout,setImmediate,requestAnimationFrame的使用及注意事项。   一、 setInterval     重复执行定时器,每隔一段时间就会去执行指定的函数。重复的执行。     语法:如下     参数:要执行的函数:当时间到了就会去执行这里的代码        时间:间隔的时间,单位是ms。1s=1000ms。当第二个参数省略的时候,这个参数为0. <script> setInterval(function () { 要执行的代码 }, 时间) </script>     事实上,除了前面两个参数,setInterval()方法还允许添加更多的参数,但是这个只有在ie9以上才支持。 <script> setInterval(function (a, b) { console.log(a + b) //2 }, 2000, 1, 1) </script>   二、setTimeout     延迟执行定时器:当延迟时间到达后,会执行指定的函数,这个函数只执行一次。     语法:如下 <script> setTimeout(function(){ 当时间到达后,会执行这里的代码 },时间); </script>     setTimeout的用法与setInterval完全一致

Promise和setTimeout执行顺序 面试题

£可爱£侵袭症+ 提交于 2020-03-14 14:17:18
看到过下面这样一道题: (function test() { setTimeout(function() {console.log(4)}, 0); new Promise(function executor(resolve) { console.log(1); for( var i=0 ; i<10000 ; i++ ) { i == 9999 && resolve(); } console.log(2); }).then(function() { console.log(5); }); console.log(3); })() 为什么输出结果是 1,2,3,5,4 而非 1,2,3,4,5 ? 比较难回答,但我们可以首先说一说可以从输出结果反推出的结论: Promise.then 是异步执行的,而创建Promise实例( executor )是同步执行的。 setTimeout 的异步和 Promise.then 的异步看起来 “不太一样” ——至少是不在同一个队列中。 相关规范摘录 在解答问题前,我们必须先去了解相关的知识。(这部分相当枯燥,想看结论的同学可以跳到最后即可。) Promise/A+ 规范 要想找到原因,最自然的做法就是去看规范。我们首先去看看 Promise的规范 。 摘录 promise.then 相关的部分如下: promise.then

js setTimeout 与 setInterval 以及 for 循环 刷新UI

烈酒焚心 提交于 2020-03-14 06:54:27
1. setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式;执行一次; 如果需要执行多次,自身再次调用 setTimeout(); 示例:无穷循环并带停止按钮的 <html> <head> <script type="text/javascript"> var c=0 var t function timedCount() { document.getElementById('txt').value=c c=c+1 t=setTimeout("timedCount()",1000) } function stopCount() { clearTimeout(t) } </script> </head> <body> <form> <input type="button" value="开始计时!" onClick="timedCount()"> <input type="text" id="txt"> <input type="button" value="停止计时!" onClick="stopCount()"> </form> <p> 请点击上面的“开始计时”按钮。输入框会从 0 开始一直进行计时。点击“停止计时”可停止计时。 </p> </body> </html> 2. setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式;

setTimeout和setInterval

二次信任 提交于 2020-03-07 21:38:51
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 setTimeout(code,millisec) code 必需。要调用的函数后要执行的 JavaScript 代码串。 millisec 必需。在执行代码前需等待的毫秒数。 http://www.w3school.com.cn/htmldom/met_win_settimeout.asp setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。 setInterval(code,millisec[,"lang"]) code 必需。要调用的函数或要执行的代码串。 millisec 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。 http://www.w3school.com.cn/htmldom/met_win_setinterval.asp 来源: https://www.cnblogs.com/crmhf/p/3823126.html

关于for循环里面异步操作的问题

坚强是说给别人听的谎言 提交于 2020-03-06 14:57:32
https://www.cnblogs.com/vipzhou/p/6519552.html 关于for循环里面异步操作的问题 首先来看一个比较简单的问题,我们想实现的就是每隔1s输出0-4的值,就是这么简单,看下错误写法: 1 2 3 4 5 6 7 8 function test() { for ( var i = 0; i < 5; ++i) { setTimeout(function() { console.log( "index is :" , i); }, 1000); } } test(); 以上代码会如何输出?输出如下: 1 2 3 4 5 index is : 5 index is : 5 index is : 5 index is : 5 index is : 5 而且该操作几乎是在同一时间完成,setTimeout定时根本就没有起作用,这是因为:单线程的js在操作时,对于这种异步操作,会先进行一次“保存”,等到整个for循环执行结束后,此时i的值已经变成5,因为setTimeout是写在for循环中的,相当于存在5次定时调用,这5次调用均是在for循环结束后进行的,所以自然而然输出都是5, 正确的实现有几种,一般情况下,我们使用递归实现,如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22