1、var
1、声明的变量作用域只有全局作用域、函数作用域和eval函数作用域
2、存在变量定义提升,但是不存在赋值提升,所以有
console.log(a);// undefined
var a = 12;
console.log(a);//12
2、let
1、let声明变量存在块级作用域: for、if、try/catch等代码块(作用域)内部的变量在外面没法访问
2、不存在变量提升,提前使用变量会造成暂时性死区
s = 12;//illegal to use 's' before it is declared;
let s;
3、不能重复定义变量
s = 12; // 任何形式定义已存在
let s = 21; // error: interferes with parameter declaration
let s = 12;
var s = 21;//error: can't have both declarations of 'x'
3、const
1、赋值后不能重新赋值(值类型放心使用,引用类型的要注意防止出错)
4、 解构
解构数组
1、普通赋值
let [x,y] = [1,2];
2、交换变量值
[x,y] = [y,x]
3、参数赋值
function f([x,y]:[number,number]){}
f([1,2])
4、剩余变量操作符...rest
let [x,y,...rest] = [4324,23,423,43,432,432,2];
对象解构
1、普通赋值
let a = {x:12,y:34:z:56};
let {x,y} = a;
x;//12
y;//34
2、剩余变量
let a = {x:12,y:34:z:56};
let {x,...rest} = a;
rest;//{y:34,z:56};
3、属性重命名
没看懂>.<
4、默认值
let {x,y = 12} = a;
匿名函数
type C = { a: string, b?: number }
function f({ a, b }: C): void {
// ...
}
展开
let x = [1,2];
let y = [3,4];
var z= [...x,..y,5];//[1,2,3,4,5]