首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >深入理解js原型 let r=Function.prototype.call.apply((a)=>a,[1,2]); 输出什么?

深入理解js原型 let r=Function.prototype.call.apply((a)=>a,[1,2]); 输出什么?

作者头像
代码简单说
发布2026-06-16 14:10:18
发布2026-06-16 14:10:18
1030
举报
文章被收录于专栏:代码简单说代码简单说
原始代码

在这里插入图片描述
在这里插入图片描述

这段代码表面上看有些复杂,但拆解后就能发现它是对 JavaScript 的一些核心概念(如 apply 和 call)的运用。我们一步步来分析,最后看看会输出什么。

简单拆解

这段代码里包含三个核心概念:

Function.prototype.call 是啥? call 是 JavaScript 函数的一个方法,它用来调用某个函数,并指定 this 的值和参数。例如:

代码语言:javascript
复制
function add(x, y) {
    return x + y;
}
console.log(add.call(null, 3, 4)); // 输出 7

这里 add.call(null, 3, 4) 就是直接调用函数 add,把 this 设置为 null,参数是 34


apply 是啥? applycall 很像,但是参数需要用数组形式传递。例如:

代码语言:javascript
复制
function add(x, y) {
    return x + y;
}
console.log(add.apply(null, [3, 4])); // 输出 7

区别是:

  • call 的参数一个个写:call(this, arg1, arg2)
  • apply 的参数用数组写:apply(this, [arg1, arg2])

  1. 那这段代码干了啥?

先看 Function.prototype.call.apply((a) => a, [1, 2]),我们分步拆解:

(1) Function.prototype.call 是一个函数

它可以调用别的函数。

(2) apply 的作用

(a) => a 当成目标函数,把 [1, 2] 作为参数传给 call

所以这段代码实际上等价于:

代码语言:javascript
复制
Function.prototype.call.call((a) => a, 1, 2);

读起来可能有点晕,继续拆解!

(3) 核心逻辑
  • 第一个 call 是作用在 (a) => a 这个箭头函数上的。
  • 1this 的值(对箭头函数无意义,因为箭头函数不依赖 this)。
  • 2 是传给 (a) => a 的参数。

因此,这段代码等效于:

代码语言:javascript
复制
let r = (a) => a; // 定义箭头函数
r = r(2);         // 调用箭头函数,传入 2

最终结论

这段代码的效果就是调用了 (a) => a,传入参数 2,结果是 2

代码语言:javascript
复制
console.log(r); // 输出 2

记住方法

用一句话总结这段代码: 它就是一层套一层,最后把参数 2 交给了箭头函数 (a) => a,结果就是 2

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 原始代码
  • 简单拆解
    • (1) Function.prototype.call 是一个函数
    • (2) apply 的作用
    • (3) 核心逻辑
  • 最终结论
  • 记住方法
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档