本文摘录自李战老师《悟透Javascript》一书的部分章节,为适应博客发表作了一点点修改。

1) 预编译分析。

JavaScript执行引擎将所有定义式函数直接创建为作用域上的函数变量,并将其值初始化为定义的函数代码逻辑,也就是为其建立了可调用的函数变量。 “var”定义的变量也会在这一步中创建起来,初始值为undefined。

2) 开始解释执行代码。

JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码。(同一段中的所有同名定义式函数都会被最后一个同名函数覆盖。)
     当遇到对函数名或变量名的使用时,JavaScript执行引擎会首先在当前作用域查找函数或变量,如果没有就到上层作用域查找,依次类推。因此,在一个作用域中前面的语句引用后面语句定义的“var”变量时,该变量其实已经存在,只是初始值为undefined。
     函数在每次调用时都会产生一个子作用域,退出函数时,这个子作用域就消失,下次调用相同函数时又是另一个子作用域了。函数内调用函数,又产生一个作用域,随着函数调用的深入自然形成“作用域链”。

欢迎讨论。

Javascript代码执行过程-《悟透Javascript》笔记的更多相关文章

  1. javaScript代码执行顺序

    javaScript是一种描述型脚本语言,由浏览器进行动态的解析和执行. 页面加载过程中,浏览器会对页面上载入的每个js代码块进行扫描. JavaScript是一段一段的分析执行的,在分析执行同一段代 ...

  2. Javascript的执行过程详细研究

    下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥是因为它属于底层行为,那么JavaScript代码执行顺序就比较形象了,因为我 ...

  3. 游览器中javascript的执行过程

    在讲这个问题之前,先来补充几个知识点,如果对此已经比较了解可以直接跳过 大多数游览器的组件构成如图 在最底层的三个组件分别是网络,UI后端和js解释器.作用如下: (1)网络- 用来完成网络调用,例如 ...

  4. 浅谈javascript函数执行过程

    javascript函数执行过程: 1. 为函数创建一个执行环境 2. 复制函数的 [[scopes]] 属性中的对象构建起执行环境的作用链域 3. 创建函数活动对象并推入执行环境作用链域的前端 4. ...

  5. JavaScript的执行过程(深入执行上下文、GO、AO、VO和VE等概念)

    JavaScript的执行过程 前言 编写一段JavaScript代码,它是如何执行的呢?简单来说,JS引擎在执行JavaScript代码的过程中需要先解析再执行.那么在解析阶段JS引擎又会进行哪些操 ...

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

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

  7. 悟透JavaScript

    要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原.前面说过,编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系.JavaScript就是把数据和代码都简化 ...

  8. 悟透JavaScript(理解JS面向对象的好文章)

    引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个 ...

  9. 悟透JavaScript (一)

    首先说明,这是别人写的一篇文章,写得很好,对理解JavaScript很有好处,所以转帖过来. 引子    编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中 ...

随机推荐

  1. GuildBrowser使用AF+MVC 学习笔记

    GuildBrowser 是一个 测试用的项目此为 魔兽世界api的一个展示客户端 项目地址:https://github.com/yehai/GuildBrowser 一:所使用的设计模式:MVC ...

  2. vue - 添加sass(less)处理

    1. 添加less.sass处理 1.1如果是sass,首先在当前目录安装处理插件(sass): npm i -D node-sass sass-loader 1.2如果是less,首先在当前目录安装 ...

  3. 20-spring学习-Spring MVC基本操作

    本次实现数据的CRUD功能,数据依然以VO类形式进行数据接收. 一,建立Message.java类操作,负责数据的接收操作. package com.SpringMVC.vo; public clas ...

  4. 在 Ubuntu12.04/Xubuntu12.04 上安装 QQ2012,这才是真正可行的

     2012-5-18 11:16:29   1. 安装wine 终端下输入: sudo apt-get install wine 复制代码 有人这样:sudo apt-get install wine ...

  5. php类自动载入

    在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件. 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件). 在 PHP 5 中,已 ...

  6. AntShares区块链的节点部署与搭建私有链

    近期陆续体验常见的区块链开源项目,比如小蚁OnChain出的AntShares.AntShares跟其它开源区块链项目不一样,他们家是使用C#开发,基于.NET Core执行在Linux,期待未来出G ...

  7. atitit.面向过程的编程语言异常处理 c语言 asp vbs 的try catch 实现

    atitit.面向过程的编程语言异常处理 c语言 asp vbs 的try catch 实现 1. 返回值法.and全局ERROR 变量法 1 2. 抛出异常Err.Raise 1 3. 实现try  ...

  8. Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制

    Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 ...

  9. C++中explicit的用法

    https://blog.csdn.net/qq_35524916/article/details/58178072 https://blog.csdn.net/jinjin1062495199/ar ...

  10. Centos7 安装Git-cola

    首先安装Git sudo yum -y install git* 找到 git-all.noarch , 安装这个. sudo yum install git-all.noarch ========= ...