如何在JavaScript中实现调用函数时按param=value形式指定参数?
问题原因
JavaScript 原生不支持位置无关的命名参数传参语法。你写的 sum(b=2,c=3) 中的 b=2、c=3 本质是普通赋值表达式,表达式的返回值就是等号右侧的值,会按调用时的位置顺序依次传给函数参数,实际执行逻辑等价于:
// 先执行赋值表达式得到返回值,非严格模式下还会意外创建全局变量b、c const arg1 = (b=2); // 返回值为2 const arg2 = (c=3); // 返回值为3 // 按位置顺序传参 sum(arg1, arg2);
此时函数sum的三个参数取值为:a=2、b=3、c=undefined,和你预期的按参数名赋值逻辑完全不符。
实现指定参数名传参的方案
JavaScript 通用的命名参数实现方案是对象参数+解构语法,修改方式如下:
- 第一步:调整函数定义,把参数改为对象解构形式
可以同时设置参数默认值,末尾加= {}是为了支持不传任何参数调用时不会抛出解构错误:// 示例同时设置了参数默认值,不需要可以去掉 function sum({a = null, b = null, c = null} = {}){ return `${c},${a},${b}` } - 第二步:调用函数时传入一个对象,键名对应你要指定的参数名,无需在意传参顺序
output.innerHTML = sum({b:2, c:3})
修改后参数取值为 a=null(按默认值)、b=2、c=3,符合预期需求。
内容的提问来源于stack exchange,提问作者Lama's
相关产品推荐
相关产品推荐

