javascript一般被归类为“动态”或者解释性语言,但事实上他是一门编译语言,与传统的编译语言不一样的是,它不是提早编译的,编译结果也不能在分布式系统中进行移植。尽管如此javascript引擎进行编译和传统的编译语言很是类似,在某些环节多是比预想的要复杂的,在传统编译语言的流程中,程序中的一段源代码在执行以前会经历三个步骤,统称为**"编译"**javascript
分词/词法分析java
这个过程会将有字符串组成的字符分解成(对编程语言来讲)有意义的代码块,这些代码块统称为词法单元。好比编程
var a = 2;
//这段代码会被分解成为下面的这些词法单元
var,a ,= , 2 ,;
//空格是否会被当作词法单元,取决于空格在这门语言中是否具备意义
复制代码
解析/语法分析编程语言
这个过程大概就是将词法单元流转化成一个有元素逐级嵌套所组成的表明了程序语法的结构树 称为抽象语法书分布式
代码生成学习
大概就在这个阶段进行变量的内存分配ui
我的小结:spa
编译型语言:把作好的源程序所有编译成二进制代码的可运行程序。而后,可直接运行这个程序。 解释型语言:把作好的源程序翻译一句,而后执行一句,直至结束!翻译
在看这本书以前一直称javascript是一门解释性语言,一般你们都叫它是脚本语言。恰好最近在学习java 可让你更加对编译这个阶段比较清楚一点 直接上图啦3d
这个.java文件里面的东西很简单就是输出一个"Hello world"
咱们用java编译器将java 编译成class 文件 将这个文件再交给java虚拟机让虚拟机执行里面的代码,这个过程是否是更加清楚编译这个过程 大概就是在代码执行前,编译器对咱们写的代码进行了检查和搭建运行代码的环境吧。在javaacript里面重要的一个概念就是做用域,做用域链。下面咱们进入做用域你的学习。
咱们将“做用域”定义为一套规则,这套规则用来管理引擎如何在当前做用域以及嵌套的做用域里面根据标识符名称进行变量查找。
词法阶段
理解词法做用域才可以更好地写清楚本身定义的变量在哪里可以访问到,在哪里不能访问到,换句话说就是词法做用域彻底就是由你在写代码时将变量和做用域块写在哪里来决定的,所以当词法分析器处理代码时会保持做用域不变(大部分状况是这样 eval with会欺骗词法)可是通常状况下用不到
好啦思考以下代码 你以为代码运行后的结果是什么?
const a = 100;
function x(){
console.log(a);
}
function y(){
const a = 0;
x();
}
y();
//这段代码可以让咱们更加清晰的以为词法做用域就是咱们开发者在一开始书写代码的时候就已经肯定了
//那个变量在哪里可以访问到 在哪里不能访问到
复制代码