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

JavaScript嵌套函数传参疑问:为何返回undefined及正确传参解析

代码问题解析

第一个代码返回undefined undefined is two years old.的原因

  • 内层函数return function(name, position){...}自己声明了name和position参数,这两个参数会屏蔽外层函数statement的同名参数。
  • 调用statement('two', 'ayen', 'what')时,虽然传了ayen和what,但内层函数根本不会使用这两个值——因为内层有自己的同名参数,优先级更高。
  • 执行value()时没有给内层函数传参,所以name和position默认是undefined,最终输出就会出现两个undefined。

第二个代码能得到预期结果的原理

  • 调用statement('two')时,只传入了number参数,外层的name和position参数没有被赋值,但这没关系——内层函数的name和position是自己的参数,不需要依赖外层。
  • 执行value('ayen', 'what')时,这两个值被传给了内层函数的name和position参数,此时这两个变量有了具体值。
  • 内层函数通过闭包保留了外层函数的number变量值('two'),所以最终能拼接出正确的字符串:ayen what is two years old.。

核心逻辑:函数作用域内的变量优先使用当前作用域的,内层同名参数会覆盖外层的同名变量;闭包可以让内层函数访问并保留外层函数的变量值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:50:37