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()
相关推荐
就爱瞎逛10 分钟前
解决Ant Design Vue 日期选择器中文不生效
前端·javascript·vue.js
快递鸟社区10 分钟前
快递鸟海运查询接口全面解析:从入门到精通,助力跨境物流可视化
java·前端·人工智能
踩着两条虫12 分钟前
可视化设计器组件系统:从交互核心到 AI 智能代理的落地实践
开发语言·前端·人工智能·低代码·设计模式·架构
光影少年18 分钟前
大前端框架生态
前端·javascript·flutter·react.js·前端框架·鸿蒙·angular.js
知彼解己23 分钟前
前端发布流程总结(Vue + Element 项目)
前端·javascript·vue.js
Royzst26 分钟前
集合进阶(Map集合)
java·前端·数据库
wand codemonkey38 分钟前
(三十)web应用+【核心】+【规矩】+【原理】
java·开发语言·前端
threelab42 分钟前
潮玩DIY设计平台技术解析:基于Babylon.js的3D定制化实践
开发语言·javascript·3d
lfw201943 分钟前
HSmartWindowControlWPF 和HWindowControlWPF的区别
开发语言·javascript·ecmascript
一拳一个娘娘腔44 分钟前
【SRC漏洞挖掘系列】第02期:XSS与CSRF——Web世界的“偷家”艺术
前端·xss·csrf