Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6的参数名?_Javascript_Ecmascript 6_Keyword Argument - Fatal编程技术网

Javascript ES6的参数名?

Javascript ES6的参数名?,javascript,ecmascript-6,keyword-argument,Javascript,Ecmascript 6,Keyword Argument,我定义了如下函数: function call_api(url, callback, query = {}, body = {}) 我希望有一种语法可以提供body和skip查询: call_api('/api/clients/new', function(x){console.log(x)}, body={1:2}) 但我必须使用这种变通方法: call_api('/api/clients/new', function(x){console.log(x)}, {}, {1:2}) 即使我

我定义了如下函数:

function call_api(url, callback, query = {}, body = {})
我希望有一种语法可以提供body和skip查询:

call_api('/api/clients/new', function(x){console.log(x)}, body={1:2})
但我必须使用这种变通方法:

call_api('/api/clients/new', function(x){console.log(x)}, {}, {1:2})
即使我提供了
body=
,它也显示为
query
参数。我使用巴别塔与网页包。我在Chrome控制台和Webpack源代码中尝试了这种语法

ES6是否支持这种语法?它是如何工作的?

如图所示,默认值仅适用于需要默认值的参数(如选项参数),而不适用于“跳过”参数

你想做的是

// function definition
function hi(a,b,c,d)

// function call
hi(a,b,d)
ES6仍然会认为您的“d”是定义的c,而不管您的默认值如何。

因此,ES6没有这种语法。

您不能指定在调用中分配给哪个参数

call_-api('/api/clients/new',function(x){console.log(x)},body={1:2})

相当于在函数外部设置名为body的变量,然后将其值传递到查询参数的spot中

您可以使用解构来实现您想要的

api函数调用(url,回调,{query={},body={}}={})

那么在你的电话里你会这么做


call_-api('/api/clients/new',function(x){console.log(x)},{body:{1:2}})

我建议您通过传递对象和对对象使用解构来解决这个问题:

function callApi({url, callback, query = {}, body = {}})
然后称之为:

callAPI({url: "/api/..", callback: (x => console.log(x)), body: {a:2}})
这将为您提供与所需语法相似的语法


JavaScript已经考虑并拒绝了命名参数,这与其他语言(如C#和Python)不同。从语言邮件列表中。

看到默认参数值仅在参数未定义时使用,唯一“跳过”参数并返回默认值的方法是将
未定义的
发送到它的位置:

call_api('/api/clients/new', function(x){console.log(x)}, undefined, {1:2})
例如:

在这种情况下,函数中的
query
的值将是
{}
(或您设置的默认值)

这在某种程度上类似于您希望通过传递空值来使用默认参数值。(例如,
子名称(参数1,参数4)

否则,如果您希望支持命名参数,最好的折衷方案是@Benjamin Gruenbaum提供的答案



更新:您可能会发现,或者更好的是,您可以在Javascript中模拟一个脚本。

关于您的选项的精彩文章:默认值!=命名参数如果在没有第三个参数的情况下调用函数,它似乎不起作用。。。然而<代码>函数调用\uAPI(url,回调,{query={},body={}}={})doesOops,忘了添加它。这就是我在文本框中快速输入代码的原因。我会更新答案。