You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ES2015词法arguments解析:square函数为何嵌套箭头函数?

关于ES2015词法arguments与箭头函数嵌套的疑问解答

嘿,这个问题问到点子上了——ES2015箭头函数的词法作用域特性在这里是核心!咱们一步步拆解来看:

原代码的运行逻辑

先理清楚原代码的执行流程:

  1. 当你调用square(2, 4, 7.5, 8, 11.5, 21)时,square函数内部的arguments对象会包含所有传入的参数。
  2. 接着定义的箭头函数example有个关键特性:箭头函数没有属于自己的arguments对象,它会直接沿用外层作用域(也就是square函数)的arguments。
  3. 调用example()时,里面的for...of循环遍历的其实是square的arguments,把每个数值平方后存入数组,最终返回这个结果数组。

为什么要嵌套箭头函数?

你改写的版本完全可以正常工作,而且更简洁——普通函数square本身就拥有自己的arguments对象,直接遍历处理就能实现需求。那原代码多套一层箭头函数的目的,其实是为了演示箭头函数的词法arguments特性:它不会像普通函数那样创建自己的arguments,而是继承外层函数的这个变量。

嵌套箭头函数带来的行为改变

把逻辑放到嵌套的箭头函数里,和直接写在square函数里相比,主要有这些差异:

  • arguments的来源不同:如果把example改成普通函数,调用example()时没有传参数,它自己的arguments会是空的,代码就会失效;但箭头函数用的是外层square的arguments,所以能正常处理传入square的参数。
  • this的绑定规则改变:箭头函数没有自己的this,它的this会继承自外层作用域的this(这个例子里没用到this,但这是箭头函数的核心特性之一)。
  • 无法作为构造函数使用:箭头函数不能被new关键字调用,不过这个例子里没涉及到构造函数场景,但这也是嵌套后函数特性的变化。

内容的提问来源于stack exchange,提问作者epeleg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:13