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()
相关推荐
WSH2012ffff5 分钟前
前端三剑客
前端
一 乐13 分钟前
汽车租赁|基于SprinBoot+vue的汽车租赁系统(源码+数据库+文档)
java·数据库·vue.js·游戏·论文·源码·汽车租赁系统
沐爸muba27 分钟前
初识 Go 语言,环境配置有问题
开发语言·前端·后端·golang
让开,我要吃人了31 分钟前
鸿蒙Harmony编程开发:服务端证书锁定防范中间人攻击示例
linux·前端·华为·移动开发·dubbo·harmonyos·鸿蒙
爱码网页成品34 分钟前
HTML静态网页成品作业(HTML+CSS)——电影肖申克的救赎介绍设计制作(1个页面)
前端·css·html
scian2244 分钟前
微信小程序源码 图书管理系统 万字文档 Springboot vue
vue.js·spring boot·微信小程序
工业甲酰苯胺1 小时前
优化系统性能:深入探讨Web层缓存与Redis应用的挑战与对策
前端·redis·缓存
猛新萌新oo2 小时前
html基础标签
前端·学习·html
读心悦2 小时前
CSS 的文字平滑属性font-smooth
前端·css
Ustinian_3102 小时前
【HTML】模拟二级菜单【附源代码】
前端·html