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. Python ORM Storm 源码修改

    安装 storm : pip install storm 目标:修改 Storm 源代码以支持自动重连文件:python安装目录/site-packages/storm/database.py 在41 ...

  2. composer 安装提示 PHP Warning: readfile(): SSL operation failed with code 1

    这是php设置openssl 没有指定cacert.pem (证书) 第一步:下载 cacert.pem 文件下载地址 https://curl.haxx.se/docs/caextract.html ...

  3. celery 异步任务小记

    这里有一篇写的不错的:http://www.jianshu.com/p/1840035cb510 自己的"格式化"后的内容备忘下: 我们总在说c10k的问题, 也做了不少优化, 然 ...

  4. request \response 总结

    request&response request 1.获得信息的方法     1> 获得请求首行信息的方法         *getMethod         *getContextP ...

  5. php实验四

    实验四 1.创建一个Person类,Person中包含三个属性name,age,wealth,分别设置为public,private,protected,再定义Person类的子类Student. 2 ...

  6. sql server中将一个字段根据某个字符拆分成多个字段显示

    sql server 数据库中某张表(Person)的数据信息是: ID Address 1 平山花园-4单元-12幢-203 2 香山花园-3单元-22幢-304 现在有需求是,将地址信息显示形式改 ...

  7. seajs和requirejs

    一.seajs 1. 使用seajs的一般步骤 a)在主页面引入sea.js b)写模块 c)在主页面使用模块 2.模块的写法 math.js define(function(require, exp ...

  8. iOS10 SiriKit QQ适配详解

    原文连接 1. 概述 苹果在 iOS10 开放了 SiriKit 接口给第三方应用.目前,QQ已经率先适配了 Siri 的发消息和打电话功能.这意味着在 iOS10 中你可以直接告诉 Siri 让它帮 ...

  9. 【转载】PyQt QSetting保存设置

    转载地址: http://blog.sina.com.cn/s/blog_4b5039210100h3zb.html 用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位 ...

  10. HDU 2082 找单词 (多重背包)

    题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...