为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过参数名称将数据传递给函数?

如何通过参数名称将数据传递给函数?

月关宝盒 2022-06-05 16:13:23
我是 JavaScript 新手。基本上,我不想通过这些函数参数的位置传递我的数据。当有 10 个或更多参数时,这很不方便。我想通过函数中定义的参数名称来传递它。但是,当我使用此语句时有一个副作用:my_func(param01=1). 在我看来,函数调用内部的用法param01=1,仅代表将1传递给参数param01,在函数调用之外没有任何影响。这是我的代码:function my_func(param01) {    console.log('param01 inside my_func: ', param01)}param01 = 3my_func(param01=1)console.log('param01 outside my_func: ', param01)// the result is 1 instead of 3.我的问题是:通过函数参数的名称将数据传递给函数的正确方法是什么?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

使用解构赋值,在这种情况下,函数可以接受 10 个参数,但您不需要对参数进行排序,因为函数内部的值将使用键名检索。调用函数时,参数也可以按任何顺序排列。


function my_func({

  param01,

  param2,

  param3

}) {

  console.log('param01 inside my_func: ', param01, param3)

}

param01 = 0

my_func({

  param01: 1,

  param3: 4

})

console.log('param01 outside my_func: ', param01)


查看完整回答
反对 回复 2022-06-05
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

我认为这里的主要问题是对 JavaScript 中参数如何工作的误解。看起来您来自以下语句的语言:

my_func(param01=1)

param0将使用该值调用的参数传递1给函数。

但在 JavaScript 中会发生这种情况:

  1. param01 是你的函数之外的一个变量,你分配1给它

  2. 该赋值表达式的结果也是1如此1也作为参数传递给函数

这解释了为什么param011 也在你的函数之外。

在 JavaScript 中,调用函数时不指定参数名称。所以这也是一样的:

my_func(1)

如果您想提供更多参数,您有多种选择:

  1. 您只需用逗号分隔它们:my_func(1, 2, 3, 4, 5, 6)

您的函数声明必须如下所示:

function my_func(param1, param2, param3, param4, param5, param6)

或者您可以使用其余参数语法:

function my_func(...params)

这样,您可以传递任意数量的参数,并且它们都将在params数组中。然后您可以像这样访问它们:param[0]对于第一个参数,param[1]对于第二个参数,依此类推。

  1. 您可以使用您的值创建一个数组并将该数组作为参数传递:

const parameters = [1, 2, 3, 4, 5 ,6];my_func(parameters)

您的函数声明必须如下所示:

function my_func(params)

作为干净编码的旁注:您的函数应具有尽可能少的参数。如果您有很多参数,这通常表明该函数正在做太多事情,因此违反了单一职责模式,应该将其拆分为更小的函数。


查看完整回答
反对 回复 2022-06-05
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

如果你想在外面是 0,但在里面是 1,你会过得很糟糕。


您传入的零是完全可以接受的。如果您希望零成为禁止...您可以使用默认运算符||来评估从左到右和短路的真实性值。


function my_func(param01) {

  param01 = param01 || 1; // internal = 0 || 1 = 1

  console.log('param01 inside my_func: ', param01) // >>> 1

}


param01 = 0 // global = 0


my_func(param01) // pass in the global 0, which IS VALID


console.log('param01 outside my_func:', param01) // >>> 0


或者,您可以传入一个对象。


function my_func(params={}) {

  console.log('param01 inside my_func: ', params.param01) // >>> 1

}


param01 = 0 // global = 0


my_func({ param01 : 1 }) // pass in a 1


console.log('param01 outside my_func:', param01) // >>> 0


查看完整回答
反对 回复 2022-06-05
  • 3 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信