一分钟搞懂this指向

独立函数调用------默认绑定!this指向全局对象(浏览器中就是Window)

scss 复制代码
function fire() {
  console.log(this); // 浏览器中: Window
}
fire(); // 函数直接调用

通过对象调用------隐式绑定!this指向调用它的对象

javascript 复制代码
const weapon = {
  name: "AK47",
  shoot() {
    console.log(this.name); // AK47
  }
};
weapon.shoot(); // 通过对象调用

call/apply/bind------显式绑定!强行指定this指向

scss 复制代码
function reload() {
  console.log(this.bullet); 
}

const gun = { bullet: 30 };
reload.call(gun);   // 30
reload.apply(gun);  // 30
const bindReload = reload.bind(gun);
bindReload();       // 30

new实例化------构造函数模式!this指向新创建的对象

javascript 复制代码
function Sniper(name) {
  this.name = name; // this指向新对象
}
const awp = new Sniper("AWM"); 
console.log(awp.name); // AWM

箭头函数是例外!没有自己的this,继承外层上下文

js复制代码

javascript 复制代码
const obj = {
  timer: function() {
    setTimeout(() => {
      console.log(this); // obj(继承外层this)
    }, 100);
  }
};
obj.timer();

记住口诀:谁调用指向谁,new对象最优先,箭头继承看外层!

相关推荐
大家的林语冰4 小时前
ES5 凉凉,Babel 8 正式发布,默认不再编译为 ES5 和 CJS......
前端·javascript·前端工程化
weedsfly6 小时前
异步编程全景与事件循环——彻底搞懂 JS 执行机制
前端·javascript
用户1733598075376 小时前
纯前端 PDF 数字签名实战:Vue 3 + pdf-lib 在浏览器里完成签名嵌入
前端·javascript
JieE21217 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE21217 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
kyriewen21 小时前
我用 AI 一周写完了整个项目,上线第一天就崩了——这是我踩过最贵的 5 个坑
前端·javascript·ai编程
Larcher21 小时前
AI Loop:让AI像人一样自主完成任务的核心机制
javascript·人工智能·设计模式
默_笙21 小时前
🃏 JS 只有 8 种数据类型,但我花了 2 天才搞懂 null 和 undefined 的区别
javascript
jump_jump1 天前
流式 HTML:从 htmx 片段装配到浏览器原生增量渲染
javascript·性能优化·前端工程化
swipe1 天前
正则表达式入门到进阶:从表单校验到手写模板引擎
前端·javascript·面试