吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1135|回复: 7
收起左侧

[已解决] 箭头函数变成普通函数报错了为什么

[复制链接]
Samding 发表于 2020-2-21 21:21
本帖最后由 Samding 于 2020-2-22 10:29 编辑

2.png

普通函数的报错信息
4.png
为什么箭头函数就能调用goToNextLevel,普通函数就调用不了,是我写错了还是别的原因?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ijwddd 发表于 2020-2-21 21:39
你的普通函数少了return吧,箭头函数其实将匿名函数的return省略了
 楼主| Samding 发表于 2020-2-21 21:53
ijwddd 发表于 2020-2-21 21:39
你的普通函数少了return吧,箭头函数其实将匿名函数的return省略了

改了还是报错,不知道普通函数怎么才能调用goToNextLevel函数
天黑我隐身 发表于 2020-2-21 22:05
本帖最后由 天黑我隐身 于 2020-2-21 22:24 编辑

该回答已被删除
南下. 发表于 2020-2-21 22:05
本帖最后由 南下. 于 2020-2-21 22:11 编辑

应该是this指向错误
mulgokizary33 发表于 2020-2-21 22:20
本帖最后由 mulgokizary33 于 2020-2-21 22:21 编辑

this指向問題,setTimeout中傳入普通函數,裏面的this就指向window;而箭頭函數this總是指向外層的調用者,所以能拿到go那個函數。如果想用普通函數的話,你可以在setTimeout前存一下this。
用Vue示範一下

a () {
        setTimeout(function () {
                console.log(this)    // -> 打印出window對象
        }, 1000)
},
b () {
        setTimeout(() => {
                console.log(this, 'arrow function') // -> 打印出vue實例對象
        }, 1000)
},
a1 () {
        let that = this
        setTimeout(function () {
                console.log(this)    // -> 打印出window對象

                console.log(that)    // -> 打印出vue實例對象
        }, 1000)
},

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Samding + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| Samding 发表于 2020-2-22 10:29
mulgokizary33 发表于 2020-2-21 22:20
[md]this指向問題,setTimeout中傳入普通函數,裏面的this就指向window;而箭頭函數this總是指向外層的調用 ...

懂了,终于可以了,谢谢
打工仔-知恩 发表于 2020-2-22 13:33
我之前做项目也是老遇见这样的问题,老是定义var  that =this;太麻烦了,而且普通函数还不美观,箭头函数挺好的,this问题简单化了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表