这与我有关,但我认为不是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.还有其他任何我想做的事情。不考虑?
答案 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'});