当前位置: 首页 > news >正文

一网打尽 this,对执行上下文说 Yes

文章目录

    • 全局环境下的 this
    • 上下文对象调用中的 this
    • bind/call/apply 改变 this 指向
    • 构造函数和 this
    • 箭头函数中的 this 指向
    • this 优先级相关
    • 实现一个bind 函数

✍创作者:全栈弄潮儿
🏡 个人主页: 全栈弄潮儿的个人主页
🏙️ 个人社区,欢迎你的加入:全栈弄潮儿的个人社区
📙 专栏地址,欢迎订阅:前端架构师之路

this 到底指向谁?

全局环境下的this、箭头函数的 this、构造函数的 this、this 的显隐性和优先级,等等,真实环境多样。

一句话总结:

谁调用它,this 就指向谁。

也就是说,this 的指向是在调用时确定的。这么说没有太大的问题,可是并不全面。

事实上,调用函数会创建新的属于函数自身的执行上下文。执行上下文的调用创建阶段会决定 this 的指向。到此,我们可以得出的一个结论:

this 的指向,是在调用函数时根据执行上下文所动态确定的。

  • 在函数体中,简单调用该函数时(非显式/隐式绑定下),严格模式下 this 绑定到 undefined,否则绑定到全局对象 window/global;
  • 一般构造函数 new 调用,绑定到新创建的对象上;
  • 一般由 call/apply/bind 方法显式调用,绑定到指定参数的对象上;
  • 一般由上下文对象调用,绑定在该对象上;
  • 箭头函数中,根据外层上下文绑定的 this 决定 this 指向。

全局环境下的 this

这种情况相对简单直接,函数在浏览器全局环境中被简单调用,非严格模式下 this 指向 window;在 use strict 指明严格模式的情况下就是 undefined。我们来看例题,请描述打印结果:

function f1 () { console.log(this) } function f2 () { 'use strict' console.log(this) } f1() // window f2() // undefined

上一题比较基础,再看一道例子:

const foo = { bar: 10, fn: function() { console.log(this) console.log(this.bar) } } var fn1 = foo.fn fn1()

这里 this 仍然指向的是 window。虽然 fn 函数在 foo 对象中作为方法被引用,但是在赋值给 fn1 之后,fn1 的执行仍然是在 window 的全局环境中。因此输出 window 和 undefined,它们相当于:

console.log(window) console.log(window.bar)

还是上面这道例题,如果调用改变为:

const foo = { bar: 10, fn: function() { console.log(this) console.log(this.bar) } } foo.fn()

将会输出:
{bar: 10, fn: ƒ}
10

http://www.jsqmd.com/news/1367033/

相关文章:

  • 2026 年合肥二手办公家具二手空调去哪找?回收出售一站式商家问答 - LYL仔仔
  • ChatBox终极指南:5分钟搭建你的个人AI助手桌面客户端
  • UE Mod Loader 原理与实战:从 DLL 注入到 Mod 管理全解析
  • 深入浅出理解欧几里得算法的原理
  • Escrcpy终极指南:3步实现Android设备无线控制与高效管理
  • RFID软硬件系统智能化怎么选?中卡全链路方案深度解析
  • 终极英雄联盟对局先知:选人阶段智能识别队友实力,快速提升排位胜率
  • Mem Reduct终极指南:5分钟学会Windows内存清理与优化
  • 基于Dev-C++与SDL的水下迷宫游戏开发:从项目结构到核心机制解析
  • 2-甲基丁酰氯选型指南:从纯度到合规,专业采购推荐 - 品研笔录
  • 终极Windows界面自定义指南:如何用ExplorerPatcher免费恢复经典操作体验
  • OpenChamber:多端可用、功能强大的自主开发环境,还保障隐私!
  • 2026成都高性价比家装公司推荐,晶玛装饰ENF环保材料闭口合同解析 - 资讯123
  • 告别电脑噪音烦恼:5分钟掌握Fan Control风扇控制终极方案
  • Java字节码解密实战:突破商业混淆器的完整技术指南
  • 终极跨平台翻译神器:3分钟掌握pot-desktop划词翻译与OCR识别
  • Figma中文界面终极解决方案:3分钟实现全界面本地化
  • Android开源项目终极宝典:200+精选资源助你快速提升开发效率
  • 高性能AI视频生成架构设计与实现:基于FramePack Studio的技术演进路线
  • 深度剖析RuoYi-Vue @DataScope注解:基于AOP与MyBatis的动态数据权限实现
  • 大语言模型高阶逻辑推理阶跃式涌现本质:从现象到多尺度相变机制
  • 基于stm32的脉搏血氧仪设计
  • SpaceX最快下周末完成收购Cursor,是算力吞金兽的自救还是另有图谋?
  • 2026张家港注册公司代办机构推荐:哪家好?口碑评测 - 品牌优企推荐
  • uniapp iOS App 上架
  • 从加解密到HTTPS
  • FanControl终极指南:高效掌控Windows系统风扇与散热管理
  • 存量房翻新涂料品牌怎么联系 高效对接芙兰雅艺术涂料 - 热点品牌推荐
  • 西安社区服务软件开发实战:从需求到上线的完整指南
  • Energy AI:像调用函数一样集成AI能力,解决工程化落地痛点