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

JavaScript解构默认参数语法含义及报错原因问询

解构赋值+函数默认参数的组合用法解析

一、原语法function weird ({a = 6, b = 3} = {}) {}的含义

这是函数默认参数和对象解构赋值结合的写法,拆成两步看更清楚:

  • 外层的= {}:给整个函数参数设置默认值。当调用函数时不传参(或者传undefined),这个参数会自动替换成空对象{}。
  • 内层的{a = 6, b = 3}:对传入的参数对象做解构赋值。意思是从参数对象里提取a和b属性,如果对象里没有对应属性,就用后面的默认值(6和3)。

所以调用weird()时,因为没传参,参数自动变成{},解构时a和b都找不到,就用默认值6和3,相加得9,最终输出9why is this。

另外,参数前不能加var是因为函数参数本身就是函数作用域内的变量声明,JS语法不允许在参数位置用var/let/const重复声明,所以会报语法错误。

二、移除= {}后调用报错的原因

改成function weird ({a = 6, b = 3}) {}后,函数没有给整个参数设置默认值。当调用weird()时,参数是undefined,而对象解构操作的前提是目标必须是一个对象(或者至少是能被转为对象的值),undefined无法被解构——此时内层的a=6默认值根本没机会生效,因为解构的目标本身就不存在,JS引擎直接抛出Cannot destructure property 'a' of 'undefined' as it is undefined的错误。

简单说,原写法的= {}是给解构“兜底”:没传参就用空对象来解构,这样内层的属性默认值能生效;去掉后没传参就拿undefined解构,直接触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:18:26