js中使用箭头函数以及setTimeout时this的指向问题

1.函数this指向

直接创建一个函数和new一个函数,this的指向问题

javascript 复制代码
    // 创建一个函数
    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

javascript 复制代码
    // 函数内部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()
  1. 我们通过直接调用函数来看this的指向

来看第二种情况 我们直接调用函数来观察内部this指向问题,直接调用函数this指向的是全局,所以此时全局中的a为1,所以此时内部setTimeout指向的都是全局作用域,所以打印为 1 和 1

javascript 复制代码
    // 函数内部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()
相关推荐
GIS学姐嘉欣2 分钟前
0帧起手《Vue零基础教程》,从前端框架到GIS开发
前端·vue.js·前端框架·gis
你说啥名字好呢2 分钟前
【React中的闭包陷阱】
javascript·react.js·ecmascript
麦麦在写代码5 分钟前
前端学习6(JS 1)
前端·javascript·学习
沈询-阿里12 分钟前
AI Agent系列 - 1 什么是 ReAct Agent?
开发语言·javascript·ecmascript
码界奇点13 分钟前
基于Flask与Vue.js的百度网盘自动转存系统设计与实现
vue.js·python·flask·自动化·毕业设计·源代码管理
白帽子黑客杰哥14 分钟前
CTF Web题目常用考点与解题技巧合集
前端·数据库·web安全·网络安全·ctf·信息收集
许___16 分钟前
axios使用 CancelToken / AbortController 方法进行取消请求
前端·javascript
LYFlied22 分钟前
Webpack详细打包流程解析
前端·面试·webpack·node.js·打包·工程化
明朝百晓生24 分钟前
强化学习[page14]【chapter7】Temporal-Difference Learning (TD learning)
前端·html