为啥js的箭头函数的this指向的是全局呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥js的箭头函数的this指向的是全局呢?相关的知识,希望对你有一定的参考价值。
参考技术A 剪头函数没有自己的this。箭头函数中的this值取决于箭头函数声明时所在上下文环境中的this值。 参考技术B js的箭头函数this指向不是全局的this,而是他的父级的this,也就说上级。因为在规范里,箭头函数的出现就是为了解决this乱七八糟的问题的。所以他这里没有this。箭头函数与this指向问题
箭头函数中this的指向问题
- 箭头函数不会改变this的指向,在它外面拿到的this是什么,它里面获取到的就是什么
- setTimeout方法挂载在window上面,高程中写道,超时调用的代码都是在全局作用域下执行,非严格模式下this指向window对象,严格模式下为undefined
- 老的通过闭包获取this的方法,都可以通过箭头函数来替换
// 箭头函数不会改变this指向
const obj = {
name: ‘xcc‘,
func: function() {
console.log(‘---1---‘, this)
},
func1: () => {
console.log(‘---2---‘, this)
},
func2: function() {
console.log(‘---3---‘, this) // { name: ‘xcc‘, ...}
setTimeout(function() {
console.log(‘---4---‘, this)
}, 1000)
},
func3: function() {
setTimeout(() => {
console.log(‘---5---‘, this)
}, 1500)
},
func4: function() {
const _this = this
setTimeout(function() {
console.log(‘---6---‘, _this)
}, 2000)
}
}
obj.func() // { name: ‘xcc‘, func: [Function: func], func1: [Function: func1] }
// 箭头函数没有this的机制,在箭头函数外面拿到的是什么,在里面拿到的就是什么
obj.func1() // {}
console.log(this) // {}
obj.func2()
// setTimeout方法是挂在window对象下的。《JavaScript高级程序设计》第二版中,
// 写到:“超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined”
// 箭头函数中的this始终都是指向当前作用域的this
obj.func3() // ---5--- { name: ‘xcc‘, ...}
// 采用闭包来获取this
obj.func4() // ---6--- { name: ‘xcc‘, ...}
以上是关于为啥js的箭头函数的this指向的是全局呢?的主要内容,如果未能解决你的问题,请参考以下文章