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. BZOJ2007——[Noi2010]海拔

    1.题意:一个裸的最小割 2.分析:直接转成对偶图最短路就好了,水爆了!(雾) #include <queue> #include <cstdio> #include < ...

  2. Java 中的内存泄露

    1.当你完成对流的读写时,应该通过调同close方法来关闭它,这个调用会释放掉十分有限的系统资源,否则,如果一个应用程序打开了过多的流而没有关闭,那么系统资源将被耗尽.

  3. UIStackView

    既要温故又要知新...温故而知新,我懂. 在Cocoachina上看到了,UIStackView. 没用过额,试iOS9的新特性.一研究,妈的还挺眼熟.一想,这不和Android上的线性布局一样么.. ...

  4. PHP 版去bom头

    原理: 找出文件前3个字符 如果它们对应的ASCII 值分别是  239,187,191 则判断为bom头,去掉前3个字符. 代码实现如下: $basedir = isset($_GET['dir'] ...

  5. shutil复制粘贴和压缩

    shutil复制粘贴和压缩 shutil 高级的文件.文件夹.压缩包处理模块 @1).将文件内容拷贝到另一个文件中 import shutil shutil.copyfileobj(open(&quo ...

  6. Android之界面(布局文件layput)

    1.关于组件居中  ① android:layout_gravity="center" 控件在包含该控件的父控件中的位置.同样,当我们在Button按钮控件中设置android:l ...

  7. navigation和tabbar上的文字.图片 自定义

    [[UITabBarItem appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor blackColor] ...

  8. SQLite -- 分页查询

    原文:http://blog.csdn.net/lu1024188315/article/details/51734514 参考:http://www.runoob.com/sqlite/sqlite ...

  9. 【Java EE 学习 25 上】【网上图书商城项目实战】

    一.概述 1.使用的jdk版本:1.6 2.java EE版本:1.6 3.指导老师:传智播客 王建 二.小项目已经实现的功能 普通用户: 1.登陆 2.注册 3.购物 4.浏览 管理员用户(全部管理 ...

  10. js特效2

    侧边栏简单版 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...