JS执行顺序

<!DOCTYPE html>

<html>

<head>

    <title></title>

    <script type="text/javascript">

        function addLoadEvent(func){//记为①

            var oldonload=window.onload;

            if(typeof window.onload!='function'){

                window.onload=func;

            }else{

                window.onload=function(){

                    oldonload();

                    func();

                }

            }

        }


        addLoadEvent(a);//记为②


        function a(){//记为③

            alert(document.getElementById('text'));

            b();

        }

        function b(){//记为④

            alert(document.getElementById('div0'));

        }


    </script>

</head>

<body>

    <p id="text">hello</p>

    <div id="div0">world</div>

</body>

</html>


JS的执行顺序是怎样的呢?

我的理解是

1、先装载函数,即①-③-④,然后执行②

2、装载①的情况不太清楚,不过好像此时并不会加载body内容;

3、装载③时获取不到id为text的DOM元素

4、装载④时获取不到id为div0的DOM元素

5、执行②时,调用① window.onload=a; 即body内容加载完后调用③,如果装载函数的时候没有获取到id为text的DOM元素,最后却获取到了,那,这是因为重新获取了一遍吗?也就是说装载时获取一遍,调用时又获取一遍吗?还是上边的3我判断有问题?

6、调用③时里边又调用了④,与5有同样的疑问,调用的时候重新获取了一遍吗?

有大神讲解一下吗?好像知道代码是如何运行的

sherryliu
浏览 1045回答 2
2回答

喝牛奶对身体好

我的理解是这样的,首先解析器因为函数声明提升,会先读取函数声明,确保他们在之后调用的时候可以访问,并没有执行代码,然后后面才调用了函数a(),并执行了其中的代码。另外按规范把脚本放在body里不就好了。

pardon110

问题本质js会从词法分析,变量解析到执行。简单点讲,运行时生成活动对象AO,在此之前会先分析变量的声明,再分析函数的说明。
打开App,查看更多内容
随时随地看视频慕课网APP