你不知道的javascript上卷小结
第一章 作用域是什么
  • 编译
  • 作用域
  • 作用域嵌套

javascript通常被归类为“动态”或者解释性语言,但事实上他是一门编译语言,与传统的编译语言不同的是,它不是提前编译的,编译结果也不能在分布式系统中进行移植。尽管如此javascript引擎进行编译和传统的编译语言非常相似,在某些环节可能是比预想的要复杂的,在传统编译语言的流程中,程序中的一段源代码在执行之前会经历三个步骤,统称为**"编译"**

  • 分词/词法分析
    这个过程会将有字符串组成的字符分解成(对编程语言来说)有意义的代码块,这些代码块统称为词法单元。比如
var a = 2;
//这段代码会被分解成为下面的这些词法单元  
var,a ,= , 2 ,;
//空格是否会被当做词法单元,取决于空格在这门语言中是否具有意义
复制代码
  • 解析/语法分析
    这个过程大概就是将词法单元流转化成一个有元素逐级嵌套所组成的代表了程序语法的结构树 称为抽象语法书
  • 代码生成
    大概就在这个阶段进行变量的内存分配
  • 个人小结:

编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

  • 在看这本书之前一直称javascript是一门解释性语言,通常大家都叫它是脚本语言。刚好最近在学习java 可以让你更加对编译这个阶段比较清楚一点 直接上图啦



这个.java文件里面的东西很简单就是输出一个"Hello world"


下面我们将它编译成java虚拟机可以执行的class文件


我们用java编译器将java 编译成class 文件 将这个文件再交给java虚拟机让虚拟机执行里面的代码,这个过程是不是更加清楚编译这个过程 大概就是在代码执行前,编译器对我们写的代码进行了检查和搭建运行代码的环境吧。在javaacript里面重要的一个概念就是作用域,作用域链。下面我们进入作用域你的学习。

第二章 词法作用域

我们将“作用域”定义为一套规则,这套规则用来管理引擎如何在当前作用域以及嵌套的作用域里面根据标识符名称进行变量查找。

  • 词法阶段
    理解词法作用域才能够更好地写清楚自己定义的变量在哪里能够访问到,在哪里不能访问到,换句话说就是词法作用域完全就是由你在写代码时将变量和作用域块写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变(大部分情况是这样 eval with会欺骗词法)但是一般情况下用不到
    好啦思考如下代码 你觉得代码运行后的结果是什么?
const a = 100;
function x(){
    console.log(a);
}
function y(){
    const a = 0;
    x();
}
y();

//这段代码能够让我们更加清晰的觉得词法作用域就是我们开发者在一开始书写代码的时候就已经确定了
//那个变量在哪里能够访问到  在哪里不能访问到


复制代码