一、关于let和const以及块作用域
块级作用域是es6新增内容,作用是将模块化的内容独立开,可以配合let使用,块级内的内容可以不受其他块级的影响,let是新的声明方法,类似于var,但是let申明的变量只在块级作用域内有效
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
console.log(a[6]()); // 10
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
console.log(a[6]()); // 6
这里的输出是不同的,前者for循环里的i用全局变量定义,每一次的循环,都会改变i值, 这里的i是同一个,二后者的i使用let定义,只在当前块级(当前循环)有效,可以这么理解,这里的i有10个,并且都会被记录,这种新的定义方式,在某些时候会非常有效,比如,因为全局变量会引起堆栈,如果大量使用,会造成性能上的“硬伤”。
const就类似于其他语言的“常量”,一旦定义就不能被改变,并且也只在块级作用域内有效。
二、解构赋值
解构赋值,是一种新的赋值方式,可以简化原有的赋值方式
//es5
var a=1;
var b=2;
var c=3;
//es6
var [a,b,c] = [1,2,3]
这种赋值可以大大简化代码,并且提高可读率;解构赋值的核心就是“匹配模式”,等号两边的模式必须相等,否者会出现错误。
解构赋值常用语对数组、对象、函数返回多个值得情况,具体如下:
//数组
var arr=[1,2,3,4];
var [f,s,t] = arr;//f=1,s=2,t=3
//对象
var Person ={
name:"aaa",
age:"12",
};
function add({name,age}){
console.log(name,age);
};
add(Person);//aaa 12
//使用这种方法,可以返回多个参数是对象的成员
//如果函数返回多个值,优先使用对象的解构赋值
function sum() {
return [1,2,3,4];
};
var [a,b,c,d] = sum();
console.log(a,b,c,d);
三、数组的扩展
数组在es6,加了不少东西,比如可以直接将类数组直接转换为数组的方法,以前只能使用数组的原型方法:Array.prototype.slice.call(),但是现在可以直接使用Array.form()方法,以及将一组值转换成数组Array.of(),find()/findIndex(),是新增的筛选方法.
我认为最重要的还是扩展运算符(...),他的作用是可以将数组转成一个个独立的值
var arr = [1,2,3,"a","b","c"];
console.log(...arr);//1 2 3 "a" "b" "c"
扩展运算符主要用于函数的调用和传参
function push(arr,...items){
arr.push(...items);
console.log(arr);
};
var p =[];
push(p,1,2,3,4);
function add(x,y){
return x+y;
};
var number = [14,15];
add(...number);
console.log(add(...number));
四、函数的扩展
比较复杂,暂时不写!