js中使用箭头函数以及setTimeout时this的指向问题
1.函数this指向
直接创建一个函数和new一个函数,this的指向问题
// 创建一个函数
function test() {
console.log(this, "this");
}
// 1.通过new的方式调用 this指向的是函数本身
let t = new test()
// 2.直接使用 this指向的是全局
test()
2.函数内部使用箭头函数this的指向问题
在函数内部使用箭头函数this的指向是当前环境this,setTimeout内部使用普通函数this的指向是全局
来看第一种情况 我们通过new一个函数来观察内部this指向问题,我们可以看到new一个函数this指向的是函数本身所以此时t.a的值是1,再来区分setTimeout内部this问题,箭头函数内部this是指向当前作用域的this,普通函数setTimeout 指向的是全局作用域,所以打印为 undefined 和 1
// 函数内部setTimeout一个是箭头函数一个是普通函数调用this的区别
function test() {
this.a = 1
setTimeout(function () {
console.log(this.a, "---a"); // undefined
}, 0)
setTimeout(() => {
console.log(this.a, "---a"); // 1
}, 0)
}
// 1.通过new的方式调用 this指向的是函数本身
let t = new test()
2. 我们通过直接调用函数来看this的指向
来看第二种情况 我们直接调用函数来观察内部this指向问题,直接调用函数this指向的是全局,所以此时全局中的a为1,所以此时内部setTimeout指向的都是全局作用域,所以打印为 1 和 1
// 函数内部setTimeout一个是箭头函数一个是普通函数调用this的区别
function test() {
this.a = 1;
setTimeout(function () {
console.log(this.a, "---a"); // 1
}, 0)
setTimeout(() => {
console.log(this.a, "---a"); //1
}, 0)
}
// 2.直接使用 this指向的是全局
test()
原文地址:https://blog.csdn.net/weixin_46194350/article/details/140494579
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!