前端/移动开发面试题更新 2026-08-05

请用 JavaScript 手写一个函数,模拟 Function.prototype.call 的行为,并给出完整可运行的代码实现。

前端/移动开发编码实现技术原理JavaScript

考察说明

考查对 JavaScript 函数调用机制、this 绑定原理以及函数式编程能力的理解。

回答思路

  1. 【回答框架 1】call 的核心机制是改变函数执行时的 this 指向并立即调用。实现思路是将目标函数设为传入的 context 对象的一个临时属性,然后通过 context 对象调用该函数,此时函数内部的 this 自然指向 context。
  2. 【回答框架 2】代码实现时需处理边界情况:若 context 为 null 或 undefined,在非严格模式下应指向全局对象(浏览器为 window,Node 为 global),严格模式下保持原值;若 context 为原始值(如数字、字符串),应转换为对应的包装对象。
  3. 【回答框架 3】为避免污染 context 对象,调用后需使用 delete 删除临时属性。若 context 是 null 或 undefined,不能直接在全局对象上挂属性,应使用临时变量保存上下文并借助 Symbol 或唯一键名避免冲突。
  4. 【回答框架 4】最终函数应支持剩余参数传递,可直接使用 ES6 的展开运算符或 ES5 的 arguments 对象与 eval 拼接字符串实现,推荐用展开运算符简化代码。
  5. 【回答框架 5】返回值应直接返回函数调用的结果,保证行为与原生 call 完全一致。
  6. 【关键点 1】核心步骤:将函数设为 context 的属性并调用,再删除该属性。
  7. 【关键点 2】处理 context 为 null、undefined 和原始值的情况。
  8. 【关键点 3】使用 Symbol 或唯一键名避免临时属性冲突。
  9. 【关键点 4】返回函数调用结果。
  10. 【关键点 5】支持参数传递,使用展开运算符或 apply 实现。
  11. 【易错点 1】严格模式下 context 为 null 或 undefined 时 this 保持原值,不能直接使用全局对象。
  12. 【易错点 2】若 context 是冻结对象或不可扩展,直接添加属性会失败,需要特殊处理。
  13. 【易错点 3】临时属性可能与原对象属性冲突,应使用 Symbol 确保唯一。