目录
let声明变量:
- 变量不能重复声明,有效防止变量污染
- 作用域为块级作用域,只在代码块中有效,如
if (true) { var a = 10; let b = 20; } console.log(a); console.log(b);
-
不支持变量提升,即不允许在变量声明前使用变量(用var变量提升的值为undefined)
-
不影响作用域链,通俗说就是块级作用域1中的块级作用域2可以访问块级作用域1中的let变量。即函数内仍可以使用全局的let变量。
const声明变量:
- 一定要赋初始值
- 一般来说命名使用大写字母
- const常量的值不可修改
- 作用于块级作用域,与let一样
- 允许对const数组、对象里面的元素进行修改(常量不可修改的本质为指向的地址不可改变)
解构赋值:
- 数组的解构:将数组元素拆分赋值给不同的变量
const T = [1, 2, 5, 4]; let [a, b, c, d] = T;
此时a,b,c,d变量分别为1,2,3,4。数量不匹配时超出的部分为undefined。
-
对象的解构:将对象元素拆分赋值给不同的变量
const data = { name: "baciii", age: 20, say: function() { console.log('say'); } }; let { name, age, say } = data;
与数组解构的区别,此时被赋值的变量名必须与对象的元素名一致,顺序可以颠倒。
模板字符串:
声明方式:`str`(双反引号)
特性:1.双反括号内可以出现换行(回车换行)
let str1 = `123
123
123`;
2.可以进行变量拼接
let name='Baciii';
let p=`Iam${name}`;
对象简化写法:
- 允许直接在大括号内写入已声明的变量和函数作为对象的属性和方法
let name = "baciii";
let age = 20;
var data = {
name,
age,
}
2. 方法声明简化,不需要写function直接声明
var data = {
say() {
console.log('say');
}
}
箭头函数:
语法:
let fn=(a,b,c)=>{xxx}
特性:
- 箭头函数的this始终是静态的,this始终指向函数声明是所在的作用域,并且不能被call()、bind()等改变this指向。
- 箭头函数不能作为构造函数实例化对象,原因是this的指向不会改变。
- 不能使用arguments()属性获取函数传递的实参。
- 缩写形式:当形参有且只有一个时,可以省略括号;当函数体只有一句时,可以省略花括号,且函数的返回值为该语句的执行结果。
let pow=n =>n*n;
参数默认值:
允许在声明函数时给参数赋默认值,若不传递参数时则使用该默认值。
function fn(a=10,b=20,c=30){
console.log(a,b,c);
}
rest参数:
获取函数的实参,代替arguments。返回值为一个数组。
语法:...args(三个点)
function fn(a, b, ...args) {
console.log(args);//[3,4,5,6]
console.log(arguments);//{1,2,3,4,5,6}
}
fn(1, 2, 3, 4, 5, 6);
args返回的是一个数组,arguments返回的是一个对象。rest参数必须放在形参的最后一个。