【你不知道的javaScript 上卷 笔记1】 javaScript 是如何工作的?
一、什么是作用域?
作用域是用来存储变量以及方便寻找变量的一套规则。
二、javaScript 编译过程(编译发生在代码执行前的几微妙)
分词/词法分析(Tokenizing/Lexing)->词法单元
解析/语法分析(paring)-> AST
对运行性能进行优化
代码生成 -> 机器指令,创建变量分配内存等操作
三、从 var a = 2;理解 javaScript 的工作原理
编译器将var a = 2;分解成词法单元,然后解析成AST抽象语法树;
编译器查找作用域中是否已经有a这个变量,有,就忽略继续编译,没有就在当前作用域创建一个新的变量a;
编译器为引擎生成运行时所需代码,这些代码用来处理a=2复制操作,引擎运行时先在当前作用域查找a这个变量,有则使用并赋值,无则继续向上级作用域查找。
四、JS引擎执行时查找变量的方式
查找声明变量并赋值 LHS
查找声明变量并取值 RHS
function foo (a) {//隐试赋值 a = 2 LHS
consloe.log(a)// RHS
}
foo(2) //foo RHS
(RHS )查找不成功是会报ReferenceError,(LHS)不成功在严格模式下会报ReferenceError,在非严格模式下引擎回隐试地创建一个全局变量
五、总结
javascript 执行前会先编译,在编译的过程中,为声明的变量和函数开辟内存空间,以在 javaScript执行时能够找到变量赋值或者取值。而作用域是一套方便高级语言存储和查找变量的一套规则,javascript当然也有自己的一套作用域规则。
【你不知道的javaScript 上卷 笔记1】 javaScript 是如何工作的?的更多相关文章
- 你不知道的JavaScript上卷笔记
你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章 初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...
- 【你不知道的javaScript 上卷 笔记3】javaScript中的声明提升表现
console.log( a ); var a = 2; 执行输出undefined a = 2; var a; console.log( a ); 执行输出2 说明:javaScript 运行时在编 ...
- Javascript学习笔记3 Javascript与BOM简介
什么是BOM BOM是browser object model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象 ...
- Javascript学习笔记1 javascript的特点
..对于网页而言,Javascript无处不在,对于英语不好的人它简直是噩梦般的存在,但形式所逼,今天开始着手学习!希望自己能坚持下去.从什么地方着手,我的目标是从大处着眼,从应用着眼,不抠细节,反正 ...
- JavaScript学习笔记(4)——JavaScript语法之变量
一.变量可以使用短名称(比如 x 和 y),也可以使用描述性更好的名称(比如 age, sum, totalvolume). 变量必须以字母开头 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做 ...
- 【你不知道的javaScript 上卷 笔记7】javaScript中对象的[[Prototype]]机制
[[Prototype]]机制 [[Prototype]]是对象内部的隐试属性,指向一个内部的链接,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototyp ...
- 【你不知道的javaScript 上卷 笔记6】javaScript中的对象相关内容
一.创建一个对象的语法 var myObj = { key: value // ... };//字面量 var myObj = new Object(); //new myObj.key = valu ...
- 【你不知道的javaScript 上卷 笔记5】javaScript中的this词法
function foo() { console.log( a ); } function bar() { var a = 3; foo(); } var a = 2; bar(); 上面这段代码为什 ...
- 【你不知道的javaScript 上卷 笔记4】javaScript 中闭包的一些运用
什么是闭包 闭包是javaScript语言的一种特性,在 javaScript 中以函数作为承接单元.当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行. fun ...
- 【你不知道的javaScript 上卷 笔记2】 javaScript 的作用域规则
一.什么是词法作用域? 词法作用域是在定义词法阶段的作用域,就是由代码变量和作用域块写在哪里决定的,基本上词法分析器在处理代码时会保持作用域不变. 二.词法作用域特点 完全由写代码期间函数所声明的位置 ...
随机推荐
- C# 小游戏-拼图魔方【Game Puzzle】
工作闲暇之余去逛了逛CodeProject,刚好现有项目主要用到就是winform,浏览了下照片,找到上周带着蛋挞打疫苗回家的照片,于是新生一记,如何把这些图片玩起来~ 80后应该都有印象,小时候有种 ...
- .NET CORE(C#) WPF简单菜单MVVM绑定
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF简单菜单MVVM绑定 阅读导航 本文背景 代码实现 本文参考 ...
- 如何用apply实现一个bind?
面试题:如何用apply实现一个bind? Function.prototype._bind = function(target) { // 保留调用_bind方法的对象 let _this = th ...
- 【转载】ibit-mybatis介绍
原文链接:ibit-mybatis介绍 概述 ibit-mybatis是一个Mybatis的增强工具,在Mybatis的基础上增加了新的特性与功能,志在简化开发流程.提高开发效率. 特性 无侵入 ...
- 6.python设置代理和添加镜像源介绍
为什么要修改镜像源? 一般使用python安装库,会用到pip install xxx 指令或者conda install xxx指令,因为pip和conda默认国外镜像源,这时会在Python的官方 ...
- gcc 与g++
which gcc 查看gcc 主要针对 .c which g++ 查看g++ 主要针对 .cpp yum install gcc 安装gc ...
- linux bash 用户输入yes or no.
脚本为script2 vim 打开脚本 内容是 对用户的键盘输入反应 sh 运行脚本,一次输入的是y ,一次输入的是n.
- OSI七层协议大白话解读
参考链接:https://www.cnblogs.com/zx125/p/11295985.html 国际标准化组织(ISO)制定了osi七层模型,iso规定了各种各样的协议,并且分了7层 应用层 应 ...
- es5和es6创建新数组的方法
//es5 let array = Array(5) let array = [] //es6 1.let array = Array.of(1,2,3,4,5) 2.let array = Arra ...
- Git 尝试
1,下载Git 2,安装GIt 3,config : git config --global user.name "mxb" git config --global user.em ...