ES6笔记1
1. var 存在变量提升,let声明变量,不存在变量提升
console.log(a); // 输出undefined
var a = 10;
var a; // 声明被提升到顶部
console.log(a); // 这时候a还没赋值,所以是undefined
a = 10; // 赋值留在原地
console.log(a);
let = 10; 报错
2. let是一个块作用域
用{ }包裹的代码块(比如 if、for、while 里的大括号),会形成一个独立的作用域
用 let/const 声明的变量,只能在这个块里访问,块外面用不了
if (true) {
var a = 1; // var声明的a在函数作用域里(或全局)
let b = 2; // let声明的b只在这个if块里有效
}
console.log(a); // 1(var的a跑出来了)
console.log(b); // 报错!b在if块外不存在
3. let不能重复声明
4. const 声明常量,一旦被声明,无法修改,其他同let
const person = {
name: '小马哥'
};
// 若想修改对象属性,可这样:person.name = 'alex';
person = {
age: 20
}; //这样不行
console.log(person);
5. 作用1:for循环是个经典例子,解决var变量提升的问题
作用2:不会污染全局变量
建议:在默认情况下用const,当知道变量值需要被修改时用let
6. 模板字符串:使用 tab 键上面的反引号 ``, 插入变量时使用 ${变量名}
const oBox = document.querySelector('.box');
let id = 1,
name = '小马哥';
let htmlStr = `<ul>
<li>
<p id=${id}>${name}</p>
</li>
</ul>`;
oBox.innerHTML = htmlStr;
7. 带参数默认值的函数
function add(a, b = 20) {
return a + b;
}
console.log(add(30)); 50
8. 默认的表达是也可以是一个函数
function add(a, b = getVal(5)) {
return a + b;
}
function getVal(val) {
return val + 5;
}
console.log(add(10)); 20
9. 剩余参数:由3个点...和一个紧跟着的具名参数指定 ...keys
ES6写法:
剩余参数(Rest Parameters)(即 ...keys
语法)相比传统的 arguments
对象,主要解决了以下几个痛点:
1、arguments
是类数组对象,没有数组的方法(如 map
、filter
、forEach
等),操作不便
2、arguments
包含所有参数(包括函数定义的命名参数),需要手动排除第一个参数(如 obj
)
3、箭头函数没有自己的 arguments
,只能访问外层函数的 arguments
,容易导致混淆
4、使用 arguments
时,函数定义无法明确表达需要接收多少个参数
10. 扩展运算符...
剩余运算符:把多个独立的参数合并到一个数组中
扩展运算符:将一个数组分割,并将各个项作为分离参数传给函数
11. ES6箭头函数()=>{}
返回一个对象:
闭包函数: