js函数执行顺序

标签: 变量提升
12人阅读 评论(0) 收藏 举报
分类:

js函数在执行过程:

1、首先对载入的js文件每个js代码块进行扫描,读入第一个代码块,进行语法扫描处理;

2、如果语法错误,则浏览器报错,该代码块不再进行扫描执行;如果有第二个代码块则进入第二个代码块进行相同的处理动作,依次递推,直至结束;

3、语法没有错,扫描代码中有没有需要做预编译处理的代码,如已定义的变量和定义是函数,有的话则进行预编译处理,处理完之后再进行至上而下的处理;遇到赋值函数时,不做预编译处理(必须先定义后引用),待到调用时再处理。(这一步不会出现报错的情况,因为浏览器只解析正确的声明)

代码理解:

<script type="text/javascript">
    Fn();  //因为是定义式函数,所以Fn() 会被浏览器首先提出来进行预编译处理,称为函数提升,然后再从上而下执行改代码块
    function Fn(){
        alert("代码块1:定义式函数")
    }  //弹出:定义式函数
</script>
<script type="text/javascript">
   var Fn()=function(){
        alert("代码块2:赋值式函数")
    }  //弹出:赋值式函数
    Fn(); //调用必须在赋值式函数后面,否则报错:Fn() is not a function
</script>

4、执行代码,有错报错。(比如变量未定义)

5、执行下一个代码块,回到第2步,重复执行。

6、直至代码结束。

js代码块直接的关系是相互独立的,但变量和方法是共享的。

代码理解:

关系是相互独立的:
<script type="text/javascript">       
alert(str);  //str未定义,浏览器报错,下面代码不执行
test = "我是代码块一变量";  //全局变量test
</script>
<script type="text/javascript">   
alert("我是代码块二");   //弹出"我是代码块二"
alert(test); //弹出 undefined
</script>
变量和方法是共享:
<script type="text/javascript">       
alert("我是代码块一"); 
test = "我是代码块一变量";  //全局变量test
</script>
<script type="text/javascript">   
alert("我是代码块二"); 
alert(test); //弹出"我是代码块一变量"
</script>



查看评论

C++ Builder 6 BizSnap/SOAP/WebService(2) -- 通过 SOAP 传递自定义类型数据(改)

    说明:本文经过一些改动,纠正了一些问题,因为原文无法修改,只好重发。不久前我收到几位朋友发来Mail说明他们在按照本文所述进行WebService应用开发时碰到的一个问题:在用ISAPI方式编...
  • Raptor
  • Raptor
  • 2002-08-19 16:31:00
  • 5063

JS中函数运行的执行次序

A.a=function(){alert(3);}A.a();A.prototype.a=function(){alert(3);}newA().a();以上例子说明了使用prototype声明的函数...
  • jaychouliyu
  • jaychouliyu
  • 2011-02-28 18:48:00
  • 4518

js 异步操作,回调函数控制执行顺序

需求: fun A() { asyn(parm1, parm2, onsuccess(){ }) ;} fun B() {asyn(paem1, parm2, onsuccess(){}) ;} ...
  • xingxing1828
  • xingxing1828
  • 2013-12-23 16:50:12
  • 1030

js函数执行先后顺序

在js函数里面想要调用另一个函数,之前我的做法是 CommUtil.closeWindow(window.parent.getParamsList(retvalues));大致就是关闭当前窗口,并将当...
  • jesson_c
  • jesson_c
  • 2017-07-21 11:56:31
  • 154

js 函数调用顺序研究

花了半个小时自己测验了一下,关于JS同名函数调用的总结同大家分享一下:html中如果出现函数同名时:如果有多个外部引入的js文件,例如a.js和b.js(引入顺序假定是a.js,然后是b.js),同...
  • lovingprince
  • lovingprince
  • 2007-03-17 09:45:00
  • 3533

async.js 实现js函数执行顺序

借助Async.js可以简化和组织我们的多个异步函数,非常方便。Async.js 本身使用在服务端-node.js 的,但它也可以用在浏览器端。举例举例: 依旧是 a() -> b()-> c() 的...
  • NFA_YY
  • NFA_YY
  • 2017-06-23 09:38:06
  • 932

js执行顺序和js异步

js执行顺序和异步感谢:http://www.cnblogs.com/zhaodongyu/p/3922961.html 感谢:http://www.2cto.com/kf/201401/27382...
  • wwww_net
  • wwww_net
  • 2016-10-13 16:25:21
  • 649

JavaScript 函数队列按时间间隔顺序执行

这段代码自己写好了,有时候项目会用到,怕忘记,所以做好笔记,以后直接贴上了,不废话直接上代码:function intercall(fun,timeout){ var parm=argumen...
  • soulyale
  • soulyale
  • 2017-09-08 09:51:20
  • 185

JS函数集合大全/JS函数

  • 2008年11月13日 17:41
  • 8KB
  • 下载

JavaScript执行机制之执行顺序

JavaScript是一种描述型的脚本语言,不同于C#或者java,它不需要进行编译成中间语言,而是由浏览器动态的解析和执行。今天我们就来说一个JavaScript是如何解析的,它的执行顺序是怎么样的...
  • u014346301
  • u014346301
  • 2016-08-19 13:39:44
  • 5652
    个人资料
    等级:
    访问量: 46
    积分: 34
    排名: 194万+
    文章分类
    文章存档