箭头函数变成普通函数报错了为什么
本帖最后由 Samding 于 2020-2-22 10:29 编辑普通函数的报错信息
为什么箭头函数就能调用goToNextLevel,普通函数就调用不了,是我写错了还是别的原因? 你的普通函数少了return吧,箭头函数其实将匿名函数的return省略了 ijwddd 发表于 2020-2-21 21:39
你的普通函数少了return吧,箭头函数其实将匿名函数的return省略了
改了还是报错,不知道普通函数怎么才能调用goToNextLevel函数 本帖最后由 天黑我隐身 于 2020-2-21 22:24 编辑
该回答已被删除 本帖最后由 南下. 于 2020-2-21 22:11 编辑
应该是this指向错误 本帖最后由 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)
},
``` mulgokizary33 发表于 2020-2-21 22:20
this指向問題,setTimeout中傳入普通函數,裏面的this就指向window;而箭頭函數this總是指向外層的調用 ...
懂了,终于可以了,谢谢 我之前做项目也是老遇见这样的问题,老是定义varthat =this;太麻烦了,而且普通函数还不美观,箭头函数挺好的,this问题简单化了。
页:
[1]