a標籤的默認事件和腳本事件的執行順序

最近看到朋友圈的一位朋友圈發了一個技術的段子,朋友圈的大概內容已被友人刪掉,找不回原圖,段子大概以下: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

最後控制檯輸出以下:事件

clipboard.png

clipboard.png

因此就算是在href中直接寫默認事件是如何執行的,並不必定是假彈窗在朋友圈例子中,有可能在腳本里面執行了其餘代碼,最後才執行默認事件。ip

相關文章
相關標籤/搜索