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
相关产品推荐
相关产品推荐

