this、call、apply、bind 这是前端面试几乎必问的一组问题也是JavaScript this 机制的核心。一、this 到底是什么一句话this 不是函数定义时决定的而是函数调用时决定的。箭头函数除外例如functionfn(){console.log(this);}fn();// window浏览器非严格模式obj.fn();// objnewfn();// 新创建的对象fn.call(a);// a谁调用this 一般就指向谁。二、this 的绑定规则面试必答this 一共有5 种绑定方式。① 默认绑定普通函数直接调用。functionfn(){console.log(this);}fn();浏览器window严格模式undefined② 隐式绑定对象调用。constobj{name:Tom,say(){console.log(this.name);}};obj.say();输出Tom这里this obj因为obj.say()是 obj 调用了 say。隐式绑定丢失很多面试喜欢问。constobj{name:Tom,say(){console.log(this.name);}};constfnobj.say;fn();输出undefined因为fn();已经变成普通函数调用。③ 显式绑定call / apply / bind就是主动指定 this。例如functionfn(age){console.log(this.name,age);}constobj{name:Tom};fn.call(obj,20);输出Tom 20④ new 绑定functionPerson(name){this.namename;}constpnewPerson(Tom);console.log(p.name);new 做了四件事① 创建一个空对象 {} ② this 指向这个对象 ③ 执行函数 ④ 返回对象所以this p⑤ 箭头函数绑定特殊箭头函数没有自己的 this。它会继承外层作用域的 this。例如constobj{name:Tom,say(){constfn(){console.log(this.name);};fn();}};obj.say();输出Tom箭头函数里面没有 this它直接使用say()里的 this。三、call、apply、bind 的区别面试高频假设functionfn(a,b){console.log(this.name,a,b);}constobj{name:Tom};call立即执行。参数一个一个传。fn.call(obj,1,2);等价于this obj fn(1,2)输出Tom 1 2apply立即执行。参数必须放数组。fn.apply(obj,[1,2]);输出Tom 1 2bind不会立即执行。返回一个新函数。constnewFnfn.bind(obj);newFn(1,2);输出Tom 1 2所以方法是否立即执行参数形式返回值call✅一个一个传执行结果apply✅数组执行结果bind❌一个一个传新函数四、为什么箭头函数没有 this这是面试最喜欢问的一题。原因箭头函数的设计目标就是不创建自己的this。普通函数在调用时会创建自己的thisfunctionfn(){}执行时JavaScript 引擎会根据调用方式决定fn() obj.fn() new fn() call() apply()不同调用方式会生成不同的 this。而箭头函数constfn(){};没有自己的this、arguments、super和new.target。它在创建时就会从外层最近的非箭头函数或全局作用域词法捕获Lexical Thisthis之后永远不会改变。例如constobj{name:Tom,say(){constfn(){console.log(this.name);};fn();}};obj.say();执行过程say() 的 this → obj 箭头函数没有自己的 this 直接沿作用域链找到 say() 的 this 所以输出 obj.name五、为什么 call、apply、bind 对箭头函数无效因为箭头函数没有自己的thiscall、apply、bind只能修改普通函数的this无法覆盖箭头函数已经词法绑定的this。constobj1{name:Tom};constobj2{name:Jerry};constfn(){console.log(this.name);};fn.call(obj1);fn.apply(obj2);constnewFnfn.bind(obj1);newFn();三次输出都相同因为箭头函数始终使用创建时所在作用域的this。六、面试回答模板2 分钟JavaScript 中this通常是在函数调用时确定的而不是定义时确定。普通函数主要有默认绑定、隐式绑定、显式绑定call/apply/bind和new绑定四种规则。call和apply都会立即执行函数区别是参数传递方式不同bind不会立即执行而是返回一个绑定了this的新函数。箭头函数比较特殊它没有自己的this采用词法作用域在定义时继承外层作用域的this因此call、apply、bind都无法修改箭头函数的this。这是箭头函数特别适合回调函数和异步场景的重要原因。

相关新闻

最新新闻

小草助手口令野草助手

小草助手口令野草助手

小草助手口令野草助手

2026/7/7 5:57:10
企业试用期合同管理的8个高频雷区与合规操作手册

企业试用期合同管理的8个高频雷区与合规操作手册

试用期是企业和员工互相了解的"缓冲期",但这个缓冲期同时也是劳动争议的高发区。很多企业管理者和HR误以为试用期是企业说了算的"观察期",可以随便定规则、随便辞人,却不知道试用期恰恰是劳动法律监管最严格的阶段之一。…

2026/7/7 5:57:10
分享一套锋哥原创的基于Java的微信小程序实验室预约管理系统(SpringBoot4+Vue3)

分享一套锋哥原创的基于Java的微信小程序实验室预约管理系统(SpringBoot4+Vue3)

大家好,我是Java1234_小锋老师,分享一套锋哥原创的基于Java的微信小程序实验室预约管理系统(SpringBoot4Vue3) 项目介绍 随着高校教学与科研规模的不断扩大,实验室作为重要的教学与实验资源,其预约与使用管理日益复杂。传统的实验…

2026/7/7 5:57:10
系统整体架构与技术选型

系统整体架构与技术选型

分层架构设计系统采用经典的三层架构模式,实现关注点分离,提升代码可维护性:表示层:基于PyQt5控件构建,负责用户交互与数据展示。主窗口采用标签页式布局,整合各业务模块,通过信号/槽机制与业务…

2026/7/7 5:57:10
如何监控员工电脑?精选六款电脑监控软件 app 分享,2026年最新推荐

如何监控员工电脑?精选六款电脑监控软件 app 分享,2026年最新推荐

员工上班摸鱼、核心资料私自拷贝带走,不少老板都发愁不知道如何监控员工电脑。今天整理六款电脑监控软件 app,都是 2026 年综合体验出色的电脑监控软件兼顾行为管理与机密防护,中小企业直接就能用。一、安秉电脑监控软件多模式无感透明加密全…

2026/7/7 5:57:10
Linux Shell 知识体系梳理与实践

Linux Shell 知识体系梳理与实践

一、Shell 的类型 Shell 是用户与操作系统内核交互的接口程序,常见的 Shell 类型包括: • Bash(Bourne Again Shell):Linux 默认 Shell,功能强大,支持脚本、别名、历史命令等。 • Sh&#xff0…

2026/7/7 5:52:09

月新闻