HarmonyOS鸿蒙Next中回调函数必须写成箭头形式吗?
HarmonyOS鸿蒙Next中回调函数必须写成箭头形式吗?
@Entry
@Component
struct Index {
...
//回调函数定义, 如果改为 sppConnSucceed(code: BusinessError, number: number){ 编译能通过, 但运行时出错
//是不是 普通的函数定义, 被视为 了 类的方法? 而简头定义, 被视为一个 函数形变量??
sppConnSucceed=(code: BusinessError, number: number) => {
...
}
.build() {
Column(){
...
}
socket.sppConnect(this.theMac, sppOption, this.sppConnSucceed); //spConnSucceed 就是回调函数
...
}
}
更多关于HarmonyOS鸿蒙Next中回调函数必须写成箭头形式吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
您好,您代码运行时之所以报错,应该是您sppConnSucceed中使用了this关键字所以导致报错。
这个问题,您百度搜索“js中箭头函数中this作用域”会讲的比较清楚。
您代码定义sppConnSucceed时有两种形式
1、sppConnSucceed(){this.**}
2、sppConnSucceed = ()=>{this.**}
第一中形式,this的作用域是谁调用sppConnSucceed就指向谁,所以sppConnect调用,this指向的sppConnect
第二种箭头函数形式,this作用域实在你sppConnSucceed函数在Index.ets定义时,就被绑定了,所以绑定的时Index的this。
所以你使用箭头函数,调用index中的字段,this.**不会报错,换成方式一会报错,就是因为this作用域不一样。
更多关于HarmonyOS鸿蒙Next中回调函数必须写成箭头形式吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
认真看一下方法的定义
说实话我大概知道你的问题,但你写的太乱了,我只能告诉你正确的姿势
function test(){}
socket.on('xxx',test)
在HarmonyOS鸿蒙Next中,回调函数并不必须写成箭头形式。你可以使用传统的函数声明或函数表达式来定义回调函数。箭头函数的主要特点是它没有自己的this
,它会继承外层函数的this
值。如果你需要在回调函数中使用外层的this
,箭头函数可能是一个方便的选择。但如果你不需要这种特性,传统的函数声明或表达式也是完全可用的。
在HarmonyOS鸿蒙Next中,回调函数并不必须写成箭头形式。你可以使用传统的函数声明或函数表达式,也可以使用箭头函数。箭头函数的主要优势在于它自动绑定this
,避免了传统函数中this
指向可能带来的问题。因此,选择哪种形式取决于你的具体需求和代码风格。