将命名参数传递给JavaScript函数的方法。任何问题?

时间:2016-06-02 20:10:15

标签: javascript parameter-passing

这与我有关,但我认为不是Passing named arguments to a Javascript function [duplicate]Named parameters in javascript的副本。

对这些问题的各种答案和评论提出了处理缺少对命名参数的JavaScript语言支持的方法。

original poster's关注的是:

  

用类似

的方式调用Javascript函数
someFunction(1, true, 'foo');
     

在不熟悉该功能的情况下不是很清楚。

我们假设someFunction在代码中的其他位置声明为:

function someFunction(numberOfClowns,wearingHat,screamingAtTopOfLungs) {
    console.log(arguments)
}

你有什么特别的理由不能像这样调用这个函数吗?

someFunction(numberOfClowns=1, wearingHat=true,screamingAtTopOfLungs='foo')

从我的初步测试来看,这似乎不会导致任何错误,并且肯定会解决任何明确的问题。

我想你需要预先var所有变量,并且要注意变量赋值正在发生,所以不要太惊讶numberOfClowns现在等于1.还有其他任何我想做的事情。不考虑?

3 个答案:

答案 0 :(得分:4)

由于您只是将分配用作标签,为什么不简单地使用注释?

someFunction(/*numberOfClowns=*/1,  /*wearingHat=*/true, /*screamingAtTopOfLungs=*/'foo')

我已经在C代码中看到了这一点(特别是对于具有5个或更多参数的函数),它可以避免你提到的令人讨厌的副作用。

由于实际上没有对var-assignment版本进行任何检查,这似乎具有所有相同的好处而没有缺点。

答案 1 :(得分:3)

  

我想您需要预先变量所有变量,并注意正在进行变量赋值

这是我眼中的一个主要问题。它使这比任何其他方法更复杂,并且它不是本地解决方案 - 你污染了你的范围。

  

还有其他我不考虑的事情吗?

命名参数/命名参数的主要参数是您可以根据需要订购和省略它们,正确的值仍将以正确的变量结束。你的方法没有提供这个。最好只是像每个人一样使用对象。

我打赌会有更多问题而不是没有作业。

答案 2 :(得分:1)

正如您所说,赋值返回指定的值,因此如果正确声明了变量,则没有问题。为避免与同一函数中的其他代码冲突,我建议将调用包装在一个块中,并使用let声明参数。

function someFunction(numberOfClowns, wearingHat, screamingAtTopOfLungs) {
  console.log(numberOfClowns, wearingHat, screamingAtTopOfLungs);
}
{
  let numberOfClowns, wearingHat, screamingAtTopOfLungs;
  someFunction(numberOfClowns=1, wearingHat=true, screamingAtTopOfLungs='foo');
}

您可能也对解构对象感兴趣:

function someFunction({numberOfClowns, wearingHat, screamingAtTopOfLungs}) {
  console.log(numberOfClowns, wearingHat, screamingAtTopOfLungs);
}
someFunction({numberOfClowns: 1, wearingHat: true, screamingAtTopOfLungs: 'foo'});