JavaScript中的“this”关键字在不同场景下的绑定规则有哪些陷阱?

this的绑定由调用方式决定:1. 默认绑定中非严格模式指向全局对象,严格模式为undefined;2. 隐式绑定取决于调用对象,赋值后调用会丢失绑定;3. 显式绑定通过call、apply、bind指定this,其中bind永久绑定无法被覆盖;4. new绑定使this指向新实例,遗漏new会导致全局污染;5. 箭头函数无自身this,继承外层作用域,常用于解决回调中this丢失问题但不宜滥用。关键在于分析函数调用形式以确定this指向。

javascript中的“this”关键字在不同场景下的绑定规则有哪些陷阱?

JavaScript中的this关键字行为灵活但容易出错,它的绑定不取决于函数定义的位置,而是由函数调用方式决定。理解其绑定规则和常见陷阱,有助于避免运行时错误。

1. 默认绑定:全局对象或undefined

在非严格模式下,独立函数调用会将this绑定到全局对象(浏览器中是window):

function foo() { console.log(this); }
foo(); // 输出 window

但在严格模式下,this为undefined:

‘use strict’;
function bar() { console.log(this); }
bar(); // 输出 undefined

陷阱:开发者常误以为函数内部的this自然指向外层作用域或对象,实际上它可能指向全局对象,造成意外污染或报错。

立即学习“Java免费学习笔记(深入)”;

2. 隐式绑定:谁调用就指向谁

当函数作为对象方法被调用时,this指向该对象:

const obj = {
  name: ‘Alice’,
  greet() { console.log(this.name); }
};
obj.greet(); // 输出 Alice

陷阱:方法赋值给变量后调用,会丢失隐式绑定:

const fn = obj.greet;
fn(); // 输出 undefined(严格模式)

此时this不再指向obj,而是退回到默认绑定规则。

3. 显式绑定:call、apply、bind强制指定this

使用call或apply可临时指定this:

function introduce() { console.log(`I am ${this.name}`); }
introduce.call({ name: ‘Bob’ }); // 输出 I am Bob

bind创建新函数并永久绑定this:

const boundFn = introduce.bind({ name: ‘Carol’ });
boundFn(); // 输出 I am Carol

陷阱:bind后的函数无法再通过call或apply改变this:

const bound = introduce.bind({ name: ‘First’ });
bound.call({ name: ‘Second’ }); // 仍输出 First

4. 构造函数调用:new绑定生成新实例

使用new调用函数时,this指向新创建的实例:

function Person(name) {
  this.name = name;
}
const p = new Person(‘David’);
console.log(p.name); // 输出 David

陷阱:忘记使用new会导致this绑定到全局对象(非严格模式):

const p2 = Person(‘Eve’);
console.log(window.name); // 输出 Eve(意外污染全局)

5. 箭头函数:无自身this,继承外层作用域

箭头函数不绑定自己的this,而是沿用词法作用域中的this:

const user = {
  name: ‘Fiona’,
  delayGreet() {
    setTimeout(() => {
      console.log(this.name);
    }, 100);
  }
};
user.delayGreet(); // 输出 Fiona

陷阱:普通函数在setTimeout中会丢失this:

setTimeout(function() {
  console.log(this.name); // undefined
}, 100);

箭头函数虽解决此问题,但过度依赖可能导致逻辑不清晰,尤其在需要动态this的场景中误用。

基本上就这些。掌握this的绑定机制,关键是看函数如何被调用,而不是定义位置。遇到问题时,优先检查调用方式和上下文丢失情况。

以上就是JavaScript中的“this”关键字在不同场景下的绑定规则有哪些陷阱?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1524108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何设计一个通用的前端数据持久化层?
上一篇 2025年12月20日 16:30:44
如何利用 Performance API 精确测量前端应用的性能指标?
下一篇 2025年12月20日 16:31:05

相关推荐

  • 抖音个人认证没有职业怎么办?抖音个人认证怎么弄

    在如今短视频风靡的时代,抖音已成为众多内容创作者展示自我、积累粉丝的重要平台。随着影响力的扩大,越来越多用户希望完成抖音个人认证以提升账号权威性。然而,在认证过程中,不少用户会遇到“没有职业”这一困扰。那么,抖音个人认证没有职业到底该怎么办?本文将为你详细解答。 一、抖音个人认证的意义 完成抖音个人…

    2026年8月26日
    000
  • 快兔网盘客户端闪退怎么回事_快兔网盘客户端闪退修复方法

    快兔网盘闪退多因系统、内存或软件问题,先清理后台、检查系统版本与存储空间,更新或重装应用,清除缓存数据,确保权限开启并切换网络环境,重启手机通常可解决。 快兔网盘客户端闪退,通常和手机系统、软件本身或运行环境有关。别急着重装,先试试下面这些办法,大部分情况都能解决。 检查手机系统和内存 手机性能不足…

    2026年8月26日
    000
  • java中的method怎么理解 方法method的3个核心概念

    java中的method怎么理解 方法method的3个核心概念java中的method怎么理解 方法method的3个核心概念java中的method怎么理解 方法method的3个核心概念java中的method怎么理解 方法method的3个核心概念

    java中的方法是面向对象编程中实现代码复用的重要结构,与函数不同之处在于其必须属于类。1. 方法定义包含访问修饰符、返回类型、名称和参数列表;2. 调用时需通过对象或类(静态方法)执行;3. 方法可重载以支持不同参数;4. 静态方法直接通过类调用,适用于工具类操作;5. 访问修饰符控制可见性,如p…

    2026年8月26日 用户投稿
    000
  • 夸克AI怎么处理新闻资讯_夸克AI新闻摘要与趋势分析功能

    夸克AI能帮助用户从海量新闻中快速提炼核心内容并进行深度分析,首先通过AI超级框生成包含关键要素的新闻摘要,接着利用深度搜索开展多角度趋势分析,揭示事件影响与历史规律,最后根据用户偏好定制并主动推送含摘要与解读的个性化资讯简报。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 …

    2026年8月26日
    000
  • 怎么优化苹果浏览器打开_Safari启动速度优化与缓存清理教程

    先检查网络连接,确认Wi-Fi或蜂窝数据正常,切换网络或重启路由器;若无效,还原网络设置。接着清理Safari缓存与历史记录,关闭多余标签页。更新iOS系统,重置浏览器设置,必要时强制重启手机。最后检查隐私设置与存储空间,关闭“阻止跨网站跟踪”测试,确保剩余空间充足。按序排查网络、缓存、系统问题,可…

    2026年8月26日
    000
  • 番茄小说怎么调整听书语速和音量_番茄小说调整听书语速和音量教程

    可通过番茄小说App内设置调节听书语速与音量。一、调整语速:进入播放界面→点击屏幕调出菜单→点击“语速”按钮→拖动滑块选择0.8至2.0倍速→确认后即时生效。二、调整音量:进入播放页→点击屏幕显示控件→点击“音量”图标→滑动调节条设置合适音量→自动保存本次设置。三、使用手机物理音量键:听书时按侧键调…

    2026年8月26日
    000
  • Win10双系统修改选择操作系统等待时间教程?

    在安装了windows 10和其他操作系统的双系统之后,开机时会有一个系统选择的倒计时,默认情况下这个时间通常是5秒或10秒。对于一些用户来说,这样的等待时间可能会觉得稍显冗长,影响了开机的速度。其实,我们可以通过简单的设置来调整这个倒计时的时间,甚至取消它,让系统直接进入默认的操作系统。接下来就让…

    2026年8月26日
    100
  • 抖音星图任务赚钱是真的吗?巨量星图是骗了多少人

    随着抖音的持续火热,越来越多用户开始关注“抖音星图任务赚钱”这一话题。有人声称这是轻松变现的好机会,也有人质疑其真实性,甚至认为是骗局。那么,抖音星图任务到底能不能赚钱?今天我们就来深入剖析这个问题。 一、什么是抖音星图任务赚钱? 抖音星图任务赚钱,指的是通过参与抖音官方推出的“巨量星图”平台发布的…

    2026年8月26日
    300
  • 怎么进入路由器设置界面_浏览器登录路由器管理后台教程

    进入路由器设置界面,说白了就是通过浏览器访问路由器的管理后台。一般情况下,在浏览器地址栏输入路由器背面贴纸上的地址(通常是192.168.1.1或192.168.0.1),然后输入用户名和密码就能进去了。但实际操作中,可能会遇到各种小问题,下面就详细说说。 解决方案 确认路由器已连接: 确保你的电脑…

    2026年8月26日
    000
  • 如何在iPhone上有效跟踪航班

    一、使用系统自带功能:地图与Siri iPhone内置的地图应用(Apple Maps)不仅能导航,还能快速查询航班动态。你只需在搜索栏输入航班编号,或出发地与目的地机场名称,即可获取该航班的实时状态,例如预计起飞和到达时间、延误情况等。此外,通过语音助手Siri,只需说一句“帮我追踪我的航班”,系…

    2026年8月26日
    200
  • 电脑本地连接受限制怎么解决?

    电脑本地连接受限制怎么解决?电脑本地连接受限制怎么解决?电脑本地连接受限制怎么解决?电脑本地连接受限制怎么解决?

    本地连接显示受限制?相信不少朋友在使用电脑时都会遇到这种情况。那么,当你们遇到这种问题时,知道如何解决吗?哈哈,如果不知道的话,那就让小编来教大家如何解决这个问题吧。 方法一: 对本地连接进行修复操作。 打开本地连接,右键选择修复选项。 等待修复完成,重新连接网络查看问题是否解决。(注意:XP用户选…

    2026年8月26日 用户投稿
    100
  • Java中远程调试的作用 解析attach机制

    Java中远程调试的作用 解析attach机制Java中远程调试的作用 解析attach机制Java中远程调试的作用 解析attach机制Java中远程调试的作用 解析attach机制

    远程调试java应用的核心在于通过jvm参数或attach机制实现本地ide对远端程序的调试。配置时需添加jdwp参数如-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,或运行时使用jdb、visualvm等工具at…

    2026年8月26日 用户投稿
    000
  • 如何举报谷歌邮箱里的诈骗_谷歌邮箱诈骗邮件举报步骤

    首先立即通过Gmail内置功能举报诈骗邮件,点击“报告垃圾邮件”或“举报为钓鱼式攻击”;其次将完整邮件转发至phishing@report.google.com纳入全球反欺诈库;最后同步向国家反诈中心官网或APP提交举报,上传截图并填写发件人、主题等信息,协助执法阻断诈骗链。 如果您在谷歌邮箱(Gm…

    2026年8月26日
    000
  • 2008r2管理员远程桌面实操授权部署

    在windows server 2008 r2中,终端服务被重新命名为远程桌面服务。通过此服务,用户可以轻松访问远程桌面会话主机(rd会话主机)服务器上安装的基于windows的程序,或完整的windows桌面。 本文将指导您在测试环境中为远程桌面服务基础结构设置远程桌面授权服务器的过程。以下是拓扑…

    2026年8月26日
    000
  • Cortana如何管理任务列表_Cortana任务列表操作指南

    使用Cortana任务列表可高效管理日常事务。首先打开Cortana,点击“任务”图标,通过输入或语音指令如“提醒我下午三点开会”创建任务;接着可编辑任务名称、时间或列表归属;完成任务后勾选复选框标记为完成,任务将移至“已完成”分类;无需的任务可通过更多选项删除,但无法恢复;最后,登录Microso…

    2026年8月26日
    100
  • windows10屏幕颜色不正常发黄_windows10屏幕颜色异常调整方法

    windows10屏幕颜色不正常发黄_windows10屏幕颜色异常调整方法windows10屏幕颜色不正常发黄_windows10屏幕颜色异常调整方法windows10屏幕颜色不正常发黄_windows10屏幕颜色异常调整方法windows10屏幕颜色不正常发黄_windows10屏幕颜色异常调整方法

    首先关闭夜间模式与色彩滤镜,再通过颜色管理校准显示器,更新或回滚显卡驱动,并检查显示器硬件设置,将色温调至6500K或恢复出厂设置以解决屏幕发黄问题。 如果您发现Windows 10系统的屏幕显示颜色异常发黄,这可能是由于系统设置、显卡驱动或显示器配置问题导致的。以下是针对此问题的多种排查与调整方法…

    2026年8月26日 用户投稿
    100
  • 你管这玩意叫双系统?直接在 Windows 上体验 Linux

    你管这玩意叫双系统?直接在 Windows 上体验 Linux你管这玩意叫双系统?直接在 Windows 上体验 Linux你管这玩意叫双系统?直接在 Windows 上体验 Linux你管这玩意叫双系统?直接在 Windows 上体验 Linux

    现在可以在windows上体验linux的gui了,酷不酷?这绝对是酷毙了! 原来是Windows官方推出的Linux子系统(WSL)终于支持了Linux GUI!这意味着你可以直接在Windows系统中运行你喜欢的GUI编辑器和工具,来开发和测试Linux应用程序。曾经多少Linux爱好者的梦想—…

    2026年8月26日 用户投稿
    200
  • java中的mapper是什么 mapper在数据访问层的角色

    java中的mapper是一种用于数据转换的设计模式。在数据访问层中,mapper的角色是将数据库数据映射到java对象,并封装数据访问逻辑。通过orm框架如mybatis或hibernate,mapper简化了数据访问,提高了代码的可读性和可维护性,但需注意避免过度依赖orm框架和接口设计的复杂性…

    2026年8月26日
    100
  • 如何将163邮箱换绑手机号

    在使用163邮箱时,可能会遇到需要更换绑定手机号的情况。例如原手机号已停用,或出于账户安全的考虑,都需要及时更新绑定信息。那么,如何正确完成163邮箱手机号的更换操作呢?接下来将为你一步步说明具体流程。 第一步,打开浏览器并登录你的163邮箱账号。成功进入邮箱主界面后,点击顶部导航栏中的“设置”按钮…

    2026年8月26日
    000
  • 抖店关店公示怎么写?抖音小店关店公示的添加模块怎么填写

    随着互联网的飞速发展,抖音小店成为了越来越多人的创业选择。由于各种原因,有些抖店可能会面临关店的风险。当你的抖店需要关店时,应该如何撰写一份合格的关店公示呢?本文将为你详细解答。 一、抖店关店公示的重要性 抖店关店公示是商家对消费者负责的表现,也是遵守相关法律法规的体现。一份详细的关店公示,可以: …

    2026年8月26日
    100

发表回复

登录后才能评论
关注微信