最近看到朋友圈的一位朋友圈发了一个技术的段子,朋友圈的大概内容已被友人删掉,找不回原图,段子大概以下:javascript
<a href="javascript:alert('已清除');">清空</a>
底下的评论都在开喷说,那是他们看过最屌的代码,嘲笑说公司外包人员写的代码的质量。java
因而我在想,那么这段代码和脚本代码结合起来到底有没有效果呢?我本身作了个demo实验了一下。跨域
<body> <a href="javascript:console.log('5');" id="app">click</a> <script> var a = document.getElementById('app'); a.onclick = function (e) { console.log('1'); console.log('2'); window.fetch('/demo.js').then(function (res) { },function(err){ alert('4'); }); console.log('3'); } </script> </body>
好了,这些log能够很好的帮助咱们看看脚本的监听click事件和href里的事件执行顺序是如何的。app
第一步:三个console.log(),是同步事件异步
第二步:fetch是一个异步事件,因为跨域问题,直接打印失败的代码log(‘4’)fetch
第三步:在fetch这个异步里面,故意alert一个阻塞住它spa
第四步:最后执行默认的事件code
最后控制台输出以下:事件
因此就算是在href中直接写默认事件是如何执行的,并不必定是假弹窗在朋友圈例子中,有可能在脚本里面执行了其余代码,最后才执行默认事件。ip