关于click/onclick事件中函数与for循环的执行机制问题
2019-05-06 16:00
197 查看
一个正常的执行机制
先附上这样一段代码
var num = 0; function aaa() { show(); for(let i=0;i<1000000000;i++){ num ++; } hide(); console.log(num); } aaa(); function show() { document.getElementsByClassName('ss')[0].style.display = 'none'; } function hide() { document.getElementsByClassName('ss')[0].style.display = 'block'; }
标签就不贴了,我们能直接看到 class为 ss 的元素在页面刚加载时就被隐藏掉,等for循环结束后,又再次显示,这是正常的执行机制。
放在onclick事件中
当把函数 aaa 放在onclick事件中,你会发现元素 几乎 没变化,其实它是在for循环执行完毕后连续运行的show和hide函数。造成这个问题的原因就是 click事件 属于回调函数,它内部的执行都是异步的,而且我还发现了一个问题,工作这么多年也是才知道,js中的dom操作 也属于异步操作(谁没事研究这个),所以导致执行机制的变化,异步函数被堆放在最后执行。
解决办法
function aaa() { show(); setTimeout(function () { for(let i=0;i<1000000000;i++){ num ++; } hide(); console.log(num); },100); }
我的想法是加个定时器,不知道有没有更好的解决办法。第一次发表文章,大家多多海涵。
相关文章推荐
- Button 控件的 OnClientClick 和 OnClick 事件执行顺序问题
- 通过自执行函数解决,for循环变量泄漏的问题
- js中的for循环与异步回调函数执行顺序问题
- 关于for循环的执行效率的问题
- 关于html控件button的onclick和onserverclick事件不能同时起作用问题
- 采用自执行的匿名函数解决for循环使用闭包的问题
- 关于WaitForMultipleObjects函数监测事件状态的问题
- 关于for循环的执行效率问题
- js关于循环中onclick绑定带参数的函数问题
- 多个onclick在一起只执行最后一个的问题解,其它是事件处理引发的问题 (JavaScript的监听事件函数attachEvent和addEventListener)
- 关于for 循环里 线程执行顺序问题
- 采用自执行的匿名函数解决for循环使用闭包的问题
- Java中for循环中执行顺序问题及break, continue用法
- 关于android中,菜单按钮点击事件首次执行之后再次执行需要双击按钮的问题
- 关于ASP.NET中OnClientClick事件Eval函数解析错误的处理
- onclick事件可以一起执行多个函数
- 关于.Net中OnClientClick事件Eval函数解析错误的处理
- Jsp页面关于BootStrap模态框和<a href onclick>事件不能同时使用,以及传参的问题
- 关于php页面最大执行时间问题(set_time_limit函数在windows下不起作用的解决)
- 关于VS2005里面的FormClosing事件内添加对话框后重复执行的问题