js | this 指向问题

https://juejin.cn/post/6844904083707396109

  • 任何函数运行的时候,都会创建一个context对象,context对象有一个this对象,在运行的时候决定。
  • 任何函数都对应一个reference类结构体(具体叫啥有点忘了),简单就抽象成这样Reference{ base ,name}; base对应就是this,name就是函数名称;
  • this 的范围:最近的{}

举个例子,自己慢慢悟吧。

javascript 复制代码
function foo(){} // 对应: {base:window,name:foo};
let a={ foo }
a.foo(); // 对应 {base:a,name:foo} 

简单粗暴的方法,就是去分析,f()在运行的时候,它的base是什么


,base为null,就是window/全局。

那怎么判断base呢?就是看f()前面有没有 .

javascript 复制代码
var obj1 = {
  a: 1
}


----------


var obj2 = {
  a: 2,
  foo1: function () {
    console.log(this.a)
  },
  foo2: function () { // 分析obj2.foo2(); 
    setTimeout(function () { // 运行这个函数的时候,没有. ,指向全局呗, 和setTimeout没关系
      console.log(this)
      console.log(this.a)
    }, 0)
  }
}
var a = 3

obj2.foo1()
obj2.foo2()
javascript 复制代码
function foo () {
  console.log(this.a)
  return function () {
    console.log(this.a)
  }
}
var obj = { a: 1 }
var a = 2

foo() // 2  foo是一串代码,foo()是执行这串代码,返回的是一串代码,返回的这串代码没执行
foo.call(obj) // 1  foo这串代码,绑定this为obj,并执行。 相当于this指向obj,然后执行foo();
foo().call(obj) // 2 1  foo(),执行,并返回新函数,执行新函数,并把新函数的this指向obj
相关推荐
2601_962071572 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
香芋芋圆3 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
INS_KF3 小时前
【编程笔记】成员函数中两个 const 的区别(const Data &getData() const;)
前端·javascript·笔记
淡海水3 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
宿6744 小时前
vue3-async
前端·javascript·vue.js
CS_Zero4 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-5 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
excel5 小时前
Nuxt + Twin CSS 中宽度超过屏幕时底部出现空白的原因与解决方案
前端·javascript
黑马程序员毕设7 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
_Twink1e7 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen