普通函数
function fun(){
return 100;
}
console.log(fun());
还可以写成
const fun = function () {
return 100;
}
console.log(fun());
箭头函数的写法
const fun = () => {
return 100;
}
console.log(fun());
还可以简写成
const fun = () => 100;
console.log(fun());
在箭头函数中,()内是函数的参数,如(x,y),当函数只有一个参数时,可以省略(),{}中是函数体,当函数体只有一条返回值时,可以省略{}和ruturn;
箭头函数有什么好处?先看一段代码
let obj = {
name: "小明",
age: 2,
sayName() {
console.log(`我是${this.name}`);
}
}
obj.sayName();
先定义了一个obj对象,obj中有一个sayName方法输出name,这是调用obj.sayName()会输出'我是小明',但如果给sayName加一个计时器
let obj = {
name: "小明",
age: 2,
sayName() {
setTimeout(function () {
console.log(`我是${this.name}`);
}, 500)
}
}
obj.sayName();
这是调用obj.sayName()就只能输出'我是',为什么没有找到this.name呢?打印看一下this
发现sayName里的this会指向obj,而setTimeout里的this指向了Window,原因找到了,因为setTimeout是Window的方法,在es5中的通常采用传值的方式解决
sayName() {
let self = this;
setTimeout(function () {
console.log(`我是${self.name}`);
}, 500)
}
现在sayName中保存一份sayName的this,然后调用这个this就可以访问了。
如果换成箭头函数就简单了
sayName() {
setTimeout(() => {
console.log(`我是${this.name}`);
}, 500)
}
箭头函数的this绑定的是当前的作用域。
总结箭头函数和普通函数的区别:
普通函数,谁调用这个函数,this指向谁
箭头函数,在哪里定义函数,this指向谁