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

为什么此闭包函数中number未定义却没有触发编译报错?

问题解答

你提到的number是multiplier函数返回的箭头函数的形参,既不是未定义的全局变量,也不是独立函数,代码没有报错是符合JavaScript语法规则的,具体解释如下:

  • 这是ES6箭头函数的简写特性:当箭头函数只有1个入参时,可以省略包裹参数的圆括号。你看到的number => number * factor等价于完整写法:
    function(number) {
      return number * factor
    }
    
    这里的number是显式声明的形参,所以不会抛出未定义的错误。
  • 代码执行逻辑可以拆分为两步:
    1. 执行multiplier(2)时,入参factor被赋值为2,函数返回上述接收number参数的箭头函数,赋值给变量twice,此时twice本身就是一个可调用的函数。
    2. 执行twice(5)时,就是调用这个箭头函数,传入的5就是number对应的实参,最终计算5 * 2得到返回值10。

如果想让代码可读性更强,你可以手动给箭头函数的参数加上圆括号,就不会出现类似的误解了:

function multiplier(factor) {
  return (number) => number * factor;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:02