为了账号安全,请及时绑定邮箱和手机立即绑定

JS执行顺序

JS执行顺序

sherryliu 2017-12-20 20:24:39
<!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有同样的疑问,调用的时候重新获取了一遍吗?有大神讲解一下吗?好像知道代码是如何运行的
查看完整描述

2 回答

?
喝牛奶对身体好

TA贡献3条经验 获得超0个赞

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

查看完整回答
反对 回复 2018-01-09
?
pardon110

TA贡献1038条经验 获得超227个赞

问题本质js会从词法分析,变量解析到执行。简单点讲,运行时生成活动对象AO,在此之前会先分析变量的声明,再分析函数的说明。

查看完整回答
反对 回复 2017-12-21
  • 2 回答
  • 0 关注
  • 1042 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信