You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
## 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 的指令序言是只有一个字符串直接量的表达式语句,它只能出现在脚本、模块和函数体的最前面。
|