## import 声明 import 声明有两种用法,一个是直接 import 一个模块,另一个是带 from 的 import,它能引入模块里的一些信息。 ```javascript import "mod"; //引入一个模块 import v from "mod"; //把模块默认的导出值放入变量v ``` 直接 import 一个模块,只是保证了这个模块代码被执行,引用它的模块是无法获得它的任何信息的,而带 from 的 import 意思是引入模块中的一部分信息,可以把它们变成本地的变量。 独立的 `export` 导入相当于是一个引用,导出的变量仍然指向同一个地址(无关引用类型和值类型)。 而 `export default` 导出的则是一个值,但是对于引用类型而言,也是会被修改的 ## var 声明的预处理 >var 在预处理阶段,不关心赋值的部分,只管在当前作用域声明这个变量 ```javascript var a = 1; function foo() { console.log(a); // undefined // var 会穿透一切语言结构 if(false) { var a = 2; } } foo(); ``` ## function 声明 >function 声明表现跟 var 相似,不同之处在于,function 声明不但在作用域中加入变量,还会给它赋值。 看一个与之不同的例子: ```javascript // foo 会被提升,但不会被赋值 console.log(foo); // undefined if(true) { function foo(){ } } ``` ## class 声明 class 声明也是存在预处理的,但是它的行为会更加的符合直觉,更倾向于抛出错误 ## 指令序言机制 "use strict"是 JavaScript 标准中规定的唯一一种指令序言,但是设计指令序言的目的是,留给 JavaScript 的引擎和实现者一些统一的表达方式,在静态扫描时指定 JavaScript 代码的一些特性。 JavaScript 的指令序言是只有一个字符串直接量的表达式语句,它只能出现在脚本、模块和函数体的最前面。