javaScript是一种描述型脚本语言,由浏览器进行动态的解析和执行。 页面加载过程中,浏览器会对页面上载入的每个js代码块进行扫描。 JavaScript是一段一段的分析执行的,在分析执行同一段代码中,定义式函数会 被提取出来优先执行。函数定义执行完毕后,才会按顺序执行其他代码。

一、代码块

JavaScript代码块是由一对script开始标签和结束标签包裹的一段代码。 JavaScript是按照代码块来进行编译和执行的,代码块之间相互独立,但是前面执行的变量和方法,后面的代码块可以使用。 前面代码块报错,不影响后面代码块的执行。

二、预处理期和执行期

JavaScript的执行过程分为两个阶段:预处理期和执行期。 预编译期会对本代码块中的所有声明的变量和函数(此时处理的只是声明式函数,而非赋值式函数)进行处理,变量和函数只是进行了声明,并未进行初始化及赋值(即只是分配了内存)。

三、执行顺序

首先进行预处理,之后按照代码的顺序执行代码。

四、声明式函数和赋值式函数

1.声明式函数

function Fun(){

}

2.赋值式函数

var Fn = function{

}

五、变量作用域及作用域链

函数执行过程中,每遇到一个变量,都会经历一次标示符解析的过程,决定从哪里获取及存储数据 。该过程从作用域链的活动对象开始查找,如果找到了就用这个标示符,如果没有找到就 继续搜索作用域链中的下一个对象,如果搜索完所有的对象都未找到,则认为该标示符未定义。 因此标示符所在的位置越深,读写速度越慢,全局变量总是在作用域链的最末端,因此编写代码时应该尽量少使用全局变量 如果一个跨作用域的对象被引用了一次以上,则先把它存储到局部变量里再使用。 因此,如果局部变量和全局变量同名,则程序会使用局部变量而不是全局变量。 var a = "globalStr"; function fun(){    alert(a);    var a = "innerstr"; }//弹出undefined。 局部变量a只进行声明并没有赋值,因此输出undefined。

function fun(){

alert(“测试内容1”);

}

fun();

function fun(){

alert(“测试内容2”);

}

fun();

两次函数调用都输出“测试内容2"

这表明,在JavaScript分析执行同一段代码时,定义式的函数会被提取出来优先执行。之后,才会按顺序执行 其他的代码。也就是第一个函数被调用之前已经被第二个函数覆盖了,因此第一次调用函数也同样输出第二个函数的内容。

javaScript代码执行顺序的更多相关文章

  1. JavaScript 代码执行顺序

    一.先预处理后执行 在一个JavaScript文件或一个JavaScript代码块的内部,浏览器会先对代码进行预处理(编译),然后再执行. 预处理会跳过执行语句,只处理声明语句,同样也是按从上到下按顺 ...

  2. javascript的执行顺序(转载)

    之前从JavaScript引擎的解析机制来探索JavaScript的工作原理,下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥 ...

  3. 浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序

    本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析 ...

  4. 详解JavaScript的任务、微任务、队列以及代码执行顺序

    摘要: 理解JS的执行顺序. 作者:前端小智 原文:详解JavaScript的任务.微任务.队列以及代码执行顺序 思考下面 JavaScript 代码: console.log("scrip ...

  5. Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序

    //据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...

  6. 当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

    编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把 ...

  7. final、static、代码块、静态代码块、内部类、代码执行顺序

    final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上               ...

  8. [js]js代码执行顺序/全局&私有变量/作用域链/闭包

    js代码执行顺序/全局&私有变量/作用域链 <script> /* 浏览器提供全局作用域(js执行环境)(栈内存) --> 1,预解释(仅带var的可以): 声明+定义 1. ...

  9. 用 console.time()和 console.timeEnd() 测试你的 javascript 代码执行效率

    无意中学习到了一种测试 javascript 代码执行效率的一种方法,就记下来便于以后使用,用到了console对象中的  time  和  timeEnd  方法 . console.time('m ...

随机推荐

  1. T-SQL备忘-表连接更新

    1.update a inner join b on a.id=b.id set a.name=b.name where ...   2.update table1 set a.name = b.na ...

  2. Ubuntu 14.04 LTS 安装Docker

    Docker官方是有很详细的安装文档(https://docs.docker.com/engine/installation/ubuntulinux/),这里做了一个Ubuntu 14.04 LTS中 ...

  3. BitMap算法应用:Redis队列滤重优化

    工作中有用到Redis滤重队列. 原来的方法如下: 方法一 为了保证操作原子性,使用Redis执行Lua脚本. 在脚本中的逻辑是,如果队列不超过某个数值,进行一次lrem操作(队列使用list结构), ...

  4. PHP Strom 配置less 并设置编译后在远程开发模式下自动上传css文件

    ctrl+alt+s ->File Watchers->add-> 其中Argument中的-x代表最后编译过后的css文件为压缩过的 此时就可以用了,但是编译过后less可以自动上 ...

  5. 坑爹的私有API

    iOS私有API扫描工作总结 背景 苹果提供的iOS开发框架分PrivateFramework和Framework,PrivateFramework下的库是绝对不允许在提交的iOS应用中使用的,只允许 ...

  6. 上个项目的一些反思 I

    最近一直在反思之前的项目,发现了很多问题.比如数据安全... 虽然项目需求是只展示最新的数据,所以几乎没用什么本地存储.除了通讯录和用户的Token. 用户通讯录另表,今天反思下用户的Token的存储 ...

  7. HtmlAgilityPack 学习和笔记

    介绍: http://www.cnblogs.com/bomo/archive/2013/01/28/2879361.html 实战 c#获取外网ip 网址:http://ip138.com/ 如图: ...

  8. sqlserver查询效率

    很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select * from table1 where name='zhan ...

  9. ACM/ICPC 之 混合图的欧拉回路判定-网络流(POJ1637)

    //网络流判定混合图欧拉回路 //通过网络流使得各点的出入度相同则possible,否则impossible //残留网络的权值为可改变方向的次数,即n个双向边则有n次 //Time:157Ms Me ...

  10. AFNetworking3.0介绍,收藏

    参考:http://www.jianshu.com/p/5969bbb4af9f 很多时候,AFNetworking都是目前iOS开发者网络库中的不二选择.Github上2W+的star数足见其流行程 ...