ES6箭头函数的使用
ECMAScript 6中引入了箭头函数,它提供了一种更简洁的函数书写方式。箭头函数最直观的好处是更简短的函数书写语法。除此之外,箭头函数还有一些其他特点。
箭头函数的基本语法
箭头函数的基本语法如下:
// 没有参数的箭头函数
let fn = () => {
// ...
}
// 一个参数的箭头函数
let fn = x => {
// ...
}
// 多个参数的箭头函数
let fn = (x, y) => {
// ...
}
// 函数体只有一行返回语句
let fn = x => x * x
如果函数体只有一行语句,可以省略大括号;如果需要返回值,可以省略return关键字。
箭头函数与this
箭头函数没有自己的this值,内部的this值继承自外围作用域。例如:
let obj = {
num: 10,
fn: function() {
setTimeout(() => {
console.log(this.num) // 10
}, 100);
}
}
这里setTimeout中的回调函数使用箭头函数,其this关键字指向外层的obj对象,而不是指向全局对象。 这避免了使用that = this这样的hack来解决this指向丢失的问题。
箭头函数不能作为构造函数
由于箭头函数没有自己的this绑定,所以不能够用作构造函数,否则会抛出错误。 箭头函数也没有prototype属性。
箭头函数不能用作Generator函数
箭头函数不能与yield一起使用,所以不能作为Generator函数。
箭头函数实例
箭头函数:可以不用编写基础函数的解构(如:function),直接使用 =>
var print = function (obj) {
console.log(obj);
};
print("print");
//箭头函数
var print2 = obj => console.log(obj);
print2("print2");
var sum = function (a, b) {
return a+b;
};
console.log(sum(1,2));
//箭头函数
var sum2 = (a,b) => a+b;
console.log(sum2(1,2));
var sum3 = (a,b) => {
console.log(a+b);
return a+b;
};
console.log(sum3(1,2));
let person = {
"name": "xiaoheizi",
learn1: function (course="java") {
console.log(this.name + " 在学习 " + course);
},
//箭头函数;不能使用this
learn2: (course) => console.log(person.name + " 在学习 " + course),
//简写
learn3(course){
console.log(this.name + " 在学习 " + course);
}
};
person.learn1("java");
person.learn2("js");
person.learn3("css");
const person = {
name:"xiaoheizi",
age:22,
language:["java","js","css"]
};
function hello(person) {
console.log("hello " + person.name);
}
hello(person);
//箭头函数、解构表达式
var hello2 = ({name}) => console.log("hello2 " + name);
hello2(person);