JavaScript中如何将变量绑定到函数的指定参数传参
问题原因
JavaScript 原生不支持其他语言常见的命名参数传参语法,你尝试的两种写法本身不符合JS语法规则,报错原因分别如下:
- 写法
DoSomething(par2 = data)中,括号内的par2 = data会被JS解析器识别为普通赋值表达式,而非给指定命名参数传值:它会先尝试在当前作用域给par2变量赋值为data,再把赋值结果(即data的值)作为第一个位置参数传给形参par1,不仅达不到指定传参给par2的效果,未声明par2时还会意外创建全局变量,解析过程中语法结构和函数调用的预期规则不匹配就会抛出语法错误。 - 写法
DoSomething(par2: data)中,冒号在函数调用的参数位置不属于合法语法:JS里冒号仅在对象字面量键值对、语句标签、三元表达式等场景下合法,参数位置直接写标识符: 值无法被解析器识别,直接触发语法报错。
正确实现方式
根据场景选以下任意一种方案即可:
- 按位置传参,显式给第一个参数传入对应默认值
这是参数数量较少时最简洁高效的写法,因为你的函数par1默认值为null,直接显式给第一个参数传null,第二个参数传data即可:
如果希望自动触发形参的默认值(后续修改par1默认值时不需要改调用代码),可以给第一个参数传DoSomething(null, data)undefined:
注意:JS中只有传入undefined时才会触发形参的默认值赋值逻辑,传null会被当做有效值传入,不会触发默认值DoSomething(undefined, data) - 重构函数为对象参数形式,模拟命名参数能力
如果函数可选参数较多、不想记忆参数顺序,可以把函数参数改为解构对象的形式,配合默认值实现和命名参数完全一致的使用体验,这也是目前JS生态中处理多可选参数的主流方案:// 调整函数定义 function DoSomething({ par1 = null, par2 = null } = {}) { // 函数内部逻辑不变,直接使用par1、par2变量即可 } // 调用时可以任意指定要传的参数,不需要考虑顺序 DoSomething({ par2: data })
内容的提问来源于stack exchange,提问作者Avusar
相关产品推荐
相关产品推荐

