1. this指向
- this指向window
- 全局对象中的this
- 全局作用域或者普通函数中的this
- 匿名函数中的this,因为匿名函数的执行环境具有全局性
- 非箭头函数
- this永远指向最后调用它的那个对象
- apply,call,bind可以改变this指向
- 箭头函数
- 箭头函数没有this,看外层函数是否有函数,有就是外层函数的this,没有就是window
- new 关键词可以改变this的指向
2. 箭头函数
1. 箭头函数介绍
- 什么是箭头函数
- ES6新增特性之一 用=>来定义函数,省去关键字function.箭头函数相当于匿名函数,并简化了函数定义
- 函数的参数放在=>前面的括号()中,函数体跟在=>后的花括号{}中
let fn = (name) => {
return `Hello ${name} !`;
};
let fn = function (name) {
return `Hello ${name} !`;
};
- 箭头函数的参数及函数体
let fn = () => {
console.log('hello');
};
let fn = name => {
console.log(`hello ${name}!`)
};
let fn = (val1, val2, val3, val4) => {
return [val1, val2, val3, val4];
}
let f = val => val;
let f = function (val) { return val };
let sum = (num1, num2) => num1 + num2;
let sum = function(num1, num2) {
return num1 + num2;
};
let getItem = id => {
id: id,
name: 'gaby'
};
let getItem = id => ({
id: id,
name: 'gaby'
});
let fn = () => void doesNotReturn();
[1, 2, 3].map(function (x) {
return x + x;
});
[1, 2, 3].map(x => x + x);
2. 箭头函数特性
- 没有原型
- 没有arguments
- 不能作为构造函数使用,不能用new
- this指向外层第一个函数的this
- 不能用call,apply,bind改变this;可以间接改变外层函数的this指向来改变箭头函数的this指向
3. Promise
- Promise三种状态
- pending 初始状态
- fulfilled/resolved 操作成功
- rejected 操作失败
- pending可以转换成另外两种状态。
- pending -> fulfilled
- pending -> rejected
- 一旦发生,状态就会凝固,不会改变
- 自身有all,reject,resolve,race方法
- 原型上有then,catch方法
- resolved 状态下的 promise 只会触发 .then 方法
- rejected 状态 下的 promise 只会触发 .catch 方法。
- 如果没有抛出异常.then和.catch返回的都是一个resolved状态的Promise
- 如果抛出异常,返回的都是一个rejected状态的Promise
- async await
- 同步代码做异步操作,两者必须搭配使用
- async表明函数内有异步操作,调用函数会返回promise
- await结果取决于它等待的内容,如果是promise就是promise的结果,如果是普通函数就进行链式调用
4. 块级作用域
- 什么是块级作用域
- 任何一对花括号({})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。
- 函数作用域: 定义在函数中的参数和变量在函数外是不可见的。
- let const