JavaScript中的this关键字是什么_它的绑定规则有哪些?
发布时间 - 2025-12-30 00:00:00 点击率:次this 是 JavaScript 中动态绑定的关键字,其值取决于函数调用方式:默认绑定(非严格→全局对象,严格→undefined)、隐式绑定(obj.method→obj)、显式绑定(call/apply/bind)、new 绑定(优先级最高,指向新实例)及箭头函数(词法继承外层 this)。
this 是 JavaScript 中一个特殊的关键字,它指向函数当前执行时的“执行上下文”中的对象。它的值不是在函数定义时确定的,而是在函数被调用时动态绑定的——也就是说,同一个函数,不同调用方式,this 可能指向完全不同的对象。
默认绑定(非严格模式 vs 严格模式)
当函数作为普通函数调用(即不通过对象属性、new 或 call/apply/bind 调用)时,this 的绑定取决于是否启用严格模式:
- 非严格模式下,this 指向全局对象(浏览器中是 window,Node.js 中是 global)
- 严格模式下,this 保持为 undefined
例如:
function foo() { console.log(this
); }
foo(); // 非严格:window;严格:undefined
隐式绑定(对象方法调用)
当函数作为对象的属性被调用时(即形如 obj.method()),this 绑定到该对象(即点号左边的对象)。
- 只看调用位置最靠近的那层对象,嵌套不影响
- 如果把方法赋值给变量再调用,会丢失隐式绑定,退回到默认绑定
例如:
const obj = { name: 'Alice', say: function() { console.log(this.name); } };
obj.say(); // 'Alice' —— this 指向 obj
const fn = obj.say;
fn(); // undefined(严格模式)或 window.name(非严格)
显式绑定(call、apply、bind)
通过 call()、apply() 或 bind() 可以强制指定函数运行时的 this 值:
- call(obj, arg1, arg2...):立即执行,参数逐个传入
- apply(obj, [args]):立即执行,参数以数组形式传入
- bind(obj, arg1, arg2...):返回一个新函数,this 固定为 obj,后续调用时生效
注意:硬绑定(bind)优先级高于隐式绑定;new 调用可覆盖 bind,但普通 call/apply 无法覆盖 new。
new 绑定(构造函数调用)
使用 new 调用函数时,会创建一个新对象,并将 this 绑定到这个新对象上,同时该对象原型指向函数的 prototype。
- new 调用优先级最高,会覆盖默认、隐式和显式(bind)绑定
- 箭头函数没有自己的 this,也不可被 new 调用
例如:
function Person(name) { this.name = name; }
const p = new Person('Bob'); // this 指向新创建的 p 实例
箭头函数的 this(词法绑定)
箭头函数不绑定自己的 this,而是**继承外层普通函数作用域中的 this 值**,且该绑定无法被 call/apply/bind 或 new 改变。
- 适合用于回调、事件处理器等需要保持外层 this 的场景
- 不能用作构造函数,没有 arguments 和 prototype
例如:
const obj = {
name: 'Charlie',
regular() { setTimeout(function() { console.log(this.name); }, 100); },
arrow() { setTimeout(() => { console.log(this.name); }, 100); }
};
obj.regular(); // undefined(非严格下是 window.name)
obj.arrow(); // 'Charlie'
# javascript
# java
# js
# node.js
# node
# 处理器
# 浏览器
# app
# win
# 作用域
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
如何用AI帮你把自己的生活经历写成一个有趣的故事?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
百度浏览器如何管理插件 百度浏览器插件管理方法
网站建设整体流程解析,建站其实很容易!
在线制作视频的网站有哪些,电脑如何制作视频短片?
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
如何快速上传建站程序避免常见错误?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
北京的网站制作公司有哪些,哪个视频网站最好?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何用搬瓦工VPS快速搭建个人网站?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
深圳网站制作平台,深圳市做网站好的公司有哪些?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Angular 表单中正确绑定输入值以确保提交与验证正常工作
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何在Windows环境下新建FTP站点并设置权限?
Swift中swift中的switch 语句
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Python高阶函数应用_函数作为参数说明【指导】
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
香港服务器建站指南:免备案优势与SEO优化技巧全解析
WordPress 子目录安装中正确处理脚本路径的完整指南
如何打造高效商业网站?建站目的决定转化率
如何在Windows虚拟主机上快速搭建网站?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
如何快速搭建安全的FTP站点?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
音响网站制作视频教程,隆霸音响官方网站?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
如何为不同团队 ID 动态生成多个非值班状态按钮
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
HTML 中动态设置元素 name 属性的正确语法详解
Python文件流缓冲机制_IO性能解析【教程】
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
免费网站制作appp,免费制作app哪个平台好?
zabbix利用python脚本发送报警邮件的方法
个人摄影网站制作流程,摄影爱好者都去什么网站?
PythonWeb开发入门教程_Flask快速构建Web应用
非常酷的网站设计制作软件,酷培ai教育官方网站?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
php打包exe后无法访问网络共享_共享权限设置方法【教程】


); }