宽屏
目的:引入箭头函数的目的是更简短的函数写法并且不绑定this,箭头函数的语法比函数表达式更简洁
使用场景:箭头函数更适用于那些本来需要匿名函数的地方
1. 基本写法
语法1:基本写法
// 普通函数
const fn = function () {
console.log('我是普通函数')
}
fn()// 箭头函数
const fn = () => {
console.log('我是箭头函数')
}
fn()语法2:只有一个参数可以省略小括号
// 普通函数
const fn = function(x) {
return x + x
}
console.log(fn(1)) // 2// 箭头函数
const fn = x => {
return x + x
}
console.log(fn(1)) // 2语法3:如果函数体只有一行代码,可以写到一行上,并且无需写 return 直接返回值
// 普通函数
const fn = function(x, y) {
return x + y
}
console.log(fn(1, 2)) // 3// 箭头函数 const fn = (x, y) => x + y console.log(fn(1, 2)) // 3
语法4:加括号的函数体返回对象字面量表达式
const fn1 = uname => ({uname: uname})
console.log(fn1('李庆林个人博客'))总结:
1.箭头函数属于表达式函数,因此不存在函数提升
2.箭头函数只有一个参数时可以省略圆括号 ()
3.箭头函数函数体只有一行代码时可以省略花括号{},并自动做为返回值被返回
4.加括号的函数体返回对象字面量表达式
2. 箭头函数参数
1.普通函数有arguments 动态参数
2.箭头函数没有 arguments 动态参数,但是有 剩余参数 ..args
const getSum = (...args) => {
let sum = 0
for (let i = 0; i < args.length; i++) {
sum += args[i]
}
return sum // 函数体有多行代码不能省略return
}
console.log(getSum(1, 2, 3)) // 63. 箭头函数this
在箭头函数出现之前,每一个新函数根据它是被如何调用的来定义这个函数的this值,非常令人讨厌
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this。
console.log(this) // 此处为window
const sayHi = function() {
console.log(this) // 普通函数指向调用者 此处为window
}
sayHi()
btn.addEventListener('click', () => {
console.log(this) // 当前this指向btn
})const user = {
name: '小明',
// 该箭头函数中的 this 为函数声明环境中 this 一致
walk: () => {
console.log(this) // 指向window 不是user
}
}
user.walk()在开发中【使用箭头函数前需要考虑函数中 this 的值】,事件回调函数使用箭头函数时,this 为全局的 window,因此DOM事件回调函数为了简便,还是不太推荐使用箭头函数
// DOM 节点
const btn = document.querySelector('.btn')
// 箭头函数 此时 this 指向了 window
btn.addEventListener('click', () => {
console.log(this)
})
// 普通函数 此时 this 指向了 DOM 对象
btn.addEventListener('click', function() {
console.log(this)
})