搜尋

首頁  >  問答  >  主體

DOMContentLoaded会影响预解析的结果吗?

先贴代码,在html文档底部插入如下代码:

!function(window){
        document.addEventListener("DOMContentLoaded", function(){
            init4();//这里为何会访问到init4?
        }, false)
    }(window)
    var init4=function(){
        console.log(4);
    }

init4是函数表达式,按说在预解析的时候,是undefined,只有执行到这一句的时候,才会被赋值为一个函数,但是如果使用了DOMContentLoaded,函数却可以在赋值之前调用后面的函数,是为什么?DOMContentLoaded?还是别的?

高洛峰高洛峰2957 天前816

全部回覆(2)我來回復

  • 代言

    代言2016-11-09 15:16:56

    简单说一下你这里的执行顺序。

    先是变量提升一个空init4,
    然后是匿名自函数,
    然后添加了一个监听器DOMContentLoaded,
    然后申明了一个匿名函数并赋值给init4,
    然后页面DOM响应完毕,触发监听事件的回调。


    回覆
    0
  • 三叔

    三叔2016-11-09 15:16:43

    !function(window) {
        setTimeout(function() {init4();}, 0);
    }(window)
    
    var init4=function() {
        console.log(4);
    }

    你这个和上方这个没什么区别,当你执行函数的时候,下方的

    var init4=function() {
        console.log(4);
    }

    早就运行了

    回覆
    0
  • 取消回覆