箭头函数和普通函数的this的值,与setTimeout的碰撞
-
首先要知道箭头函数this值得指向。箭头函数的this值始终指向函数声明时作用域下的this值。
-
普通函数this值要调用时确定,可以看去我的JavaScript函数this值指向文章。
-
setTimeout会延迟函数的声明,将函数的this值改为window,但是改变不了箭头函数的this的值。
弄清楚函数本级作用域和上一级作用域。
普通函数fn的作用域就是在app1中,所以this.a就是1.
函数fn就是箭头函数,箭头函数的this的值在它的上一级作用域中,所以fn的作用域就是app1的作用域,也就是windows。所以this.a就是undefined。
const zhangsan = {
name: '张三',
sayHi() {
console.log(this)
},
wait() {
setTimeout(() => {
console.log(this)
})
},
waitAgain() {
setTimeout(function() {
consolel.log(this)
})
}
}
- waitAgain中的function(){}函数this值是windows
- wait中箭头函数的this值就是wait的作用域,所以this就是zhangsan
- sayHi的this值也是zhangsan
Person的作用域就是windows,所以windows下面的age=0,age=8,不会影响全局变量。
下面这个题目还是有必要多看看