箭头函数与普通函数异同,比如:getDataList:()=>{ } , getDtaList(){ } 两种表示方法。
两种函数写法区别(小程序 Page 场景)
1. 写法对比
Page({
// 写法1:箭头函数赋值
getDataList: () => {
console.log(this)
},
// 写法2:对象简写普通函数(推荐小程序用)
getDataList() {
console.log(this)
}
})
核心区别:this 指向(最关键)
① getDataList: () => {} 箭头函数
箭头函数不绑定自己的 this,会向外层找定义时的 this。
在 Page 顶层写箭头函数,外层作用域不是页面实例,this ≠ 当前页面Page:
getDataList: () => {
console.log(this) // 不是页面,undefined/全局对象
this.setData() // 直接报错:setData is not a function
}
致命问题:无法调用
this.setData、this.getDataList()
② getDataList() {} 普通方法(标准对象方法)
普通函数的 this 在调用时自动绑定为当前 Page 页面实例:
getDataList() {
console.log(this) // 当前页面对象
this.setData({}) // 正常可用
this.getDataList()// 自身可递归调用
}
2. 作用域与调用场景差异
箭头函数 getDataList: () => {}
- 无自己的
this、arguments; - 不能用作构造函数;
- Page 顶级不要用,会丢失页面 this;
- 仅适合写在回调内部(wx.request.success、定时器里)。
普通方法 getDataList() {}
- 拥有独立
this,调用时自动绑定页面; - 可以通过
this.方法名()互相调用; - 小程序 Page、Component 里统一推荐这种写法,不会踩坑。
3. 代码示例直观对比
错误示范(箭头函数丢失this)
Page({
data: { num: 1 },
getDataList: () => {
this.setData({ num: 2 }) // 报错!this不是页面
}
})
正确示范(普通方法)
Page({
data: { num: 1 },
getDataList() {
this.setData({ num: 2 }) // 正常执行
}
})
4. 什么时候能用箭头函数?
仅在回调内部使用,用来保留外层页面this:
getDataList() {
wx.request({
success: (res) => {
// 这里箭头函数,保留外层this(页面实例)
this.setData({ list: res.data.result })
}
})
}
总结一句话
- Page 页面顶层定义方法:只用
fn() {},别用箭头函数,否则this失效; - 接口回调、定时器内部:用箭头函数,锁住页面
this; - 你之前报错
Unexpected token一是少写=>,二是Page顶层用箭头函数极易连锁报错。
浙公网安备 33010602011771号