javascript this是什么_它的指向如何确定
发布时间 - 2026-01-10 00:00:00 点击率:次this指向取决于调用方式而非定义位置;call/apply/bind可显式绑定且优先级最高;普通调用时非严格模式指向全局,严格模式为undefined;箭头函数无this,继承词法作用域this。
JavaScript 中 this 指向谁,取决于函数怎么被调用
不是看函数在哪定义,也不是看它写在哪个对象里,而是看执行时的「调用方式」。同一个函数,不同调用方式下 this 可能完全不同。
call、apply、bind 会显式绑定 this
这三个方法直接指定函数运行时的 this 值,优先级高于其他规则(除了箭头函数)。
-
func.call(obj, arg1, arg2):立即执行,this指向obj -
func.apply(obj, [arg1, arg2]):立即执行,参数以数组传入 -
const bound = func.bind(obj):返回新函数,this永远绑定为obj - 多次
bind无效,只有第一次生效
function logThis() {
console.log(this);
}
cons
t obj = { name: 'test' };
logThis.call(obj); // { name: 'test' }
logThis.bind({ x: 1 }).call({ y: 2 }); // 仍然是 { x: 1 },第二次 call 不覆盖 bind 的 this
普通函数调用(非严格模式 vs 严格模式)
这是最容易出错的场景——没任何修饰地直接写 fn():
- 非严格模式下:
this指向window(浏览器)或global(Node.js) - 严格模式下:
this是undefined - ES6 模块默认启用严格模式,所以模块内直接调用函数时
this很可能是undefined
"use strict";
function foo() {
console.log(this); // undefined
}
foo();
箭头函数没有自己的 this
它不遵循上述任何规则,而是沿用定义时所在词法作用域的 this 值,且无法被 call/apply/bind 修改。
- 常用于事件回调、定时器中避免
this丢失 - 不能用作构造函数(没有
prototype,调用new会报错) - 在对象方法中写箭头函数,
this不指向该对象,而是外层作用域
const obj = {
name: 'Alice',
regular() {
return this.name; // 'Alice'
},
arrow: () => {
return this.name; // undefined(全局中 this 没有 name)
}
};
真正麻烦的是嵌套函数 + 异步 + 类方法混合的场景,比如 setTimeout 里调用对象方法,或 React 类组件中事件处理函数忘记绑定 this。这时候别硬记规则,直接用 console.log(this) 看一眼最实在。
# react
# javascript
# es6
# java
# js
# node.js
# node
# 浏览器
# app
# win
# 作用域
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
iOS中将个别页面强制横屏其他页面竖屏
如何用景安虚拟主机手机版绑定域名建站?
C语言设计一个闪闪的圣诞树
如何有效防御Web建站篡改攻击?
Laravel如何使用Gate和Policy进行授权?(权限控制)
如何在景安云服务器上绑定域名并配置虚拟主机?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
北京企业网站设计制作公司,北京铁路集团官方网站?
Android仿QQ列表左滑删除操作
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Laravel怎么实现验证码(Captcha)功能
Laravel如何使用Telescope进行调试?(安装和使用教程)
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
Android Socket接口实现即时通讯实例代码
Python图片处理进阶教程_Pillow滤镜与图像增强
javascript基于原型链的继承及call和apply函数用法分析
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
如何在服务器上配置二级域名建站?
BootStrap整体框架之基础布局组件
如何基于云服务器快速搭建个人网站?
如何撰写建站申请书?关键要点有哪些?
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
js实现获取鼠标当前的位置
详解vue.js组件化开发实践
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
晋江文学城电脑版官网 晋江文学城网页版直接进入
图册素材网站设计制作软件,图册的导出方式有几种?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何使用withoutEvents方法临时禁用模型事件
如何在局域网内绑定自建网站域名?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
原生JS实现图片轮播切换效果
网站优化排名时,需要考虑哪些问题呢?
网站制作报价单模板图片,小松挖机官方网站报价?
详解jQuery停止动画——stop()方法的使用
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧


t obj = { name: 'test' };
logThis.call(obj); // { name: 'test' }
logThis.bind({ x: 1 }).call({ y: 2 }); // 仍然是 { x: 1 },第二次 call 不覆盖 bind 的 this