Samding 发表于 2020-2-21 21:21

箭头函数变成普通函数报错了为什么

本帖最后由 Samding 于 2020-2-22 10:29 编辑



普通函数的报错信息

为什么箭头函数就能调用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示範一下
```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)
},

```

Samding 发表于 2020-2-22 10:29

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

懂了,终于可以了,谢谢

打工仔-知恩 发表于 2020-2-22 13:33

我之前做项目也是老遇见这样的问题,老是定义varthat =this;太麻烦了,而且普通函数还不美观,箭头函数挺好的,this问题简单化了。
页: [1]
查看完整版本: 箭头函数变成普通函数报错了为什么