为啥参数的顺序保持不变,即使参数作为命名参数传递?在 JavaScript 中
Posted
技术标签:
【中文标题】为啥参数的顺序保持不变,即使参数作为命名参数传递?在 JavaScript 中【英文标题】:why order of parameter remain same even arguments are passed as named arguments? in javascript为什么参数的顺序保持不变,即使参数作为命名参数传递?在 JavaScript 中 【发布时间】:2018-12-17 23:11:06 【问题描述】:例如在python中:
def dfde(name,age):
print(age)
print(name)
print(age)
dfde(age=27,name="dfd")
将给出如下输出:
27
dfd
27
但 javascript 中的相同内容会给出如下输出:
let dfde = function(name, age)
console.log(age);
console.log(name);
console.log(age);
dfde(age=27, name="dfd")
将输出为:
dfd
27
dfd
甚至参数作为命名参数传递,
这是为什么呢?
【问题讨论】:
您的 python 代码使用命名参数,而 javascript 代码包含位置参数。当您使用命名参数时,函数将根据名称检查参数,当您传递位置参数时,它会使用参数的位置进行检查 【参考方案1】:甚至参数作为命名参数传递,
没有命名参数。
dfde(age = 27, name = "dfd")
等同于:
dfde(27, "dfd")
(另外age = 27
创建了一个新的全局变量age并为其赋值)
要在 js 中使用命名参数之类的东西,你必须传递一个对象文字并解构它:
function dfde(name, age)
console.log(name, age);
dfde( name: "dfd", age: 27 );
// Same as
dfde( age: 27, name: "dfd" );
【讨论】:
如果我们还需要将默认值传递给函数声明怎么办?我们可以这样做吗: let scoreName = function (name:"edfe", age:27) console.log(name,age): ;通过调用函数作为 scoreName() 它会给出:edfe 27 @mohammad 是的,只是做function(name = "sgdh", age = 27 = )
【参考方案2】:
发生这种情况是因为 JavaScript 中没有命名参数。它按优先级顺序识别参数。所以,你应该这样做:
let dfde = function(name, age)
console.log(age);
console.log(name);
console.log(age);
dfde(name="dfd", age=27) // it just declares variable to global scope as `var`
dfde("dfd", 27) // same as above
您也可以使用arguments
记录函数接收参数的方式,如下所示:
let dfde = function(name, age)
console.log(arguments); // no named parameters
dfde(name="dfd", age=27)
如果你想使用命名参数之类的东西,请参考this answer。
【讨论】:
以上是关于为啥参数的顺序保持不变,即使参数作为命名参数传递?在 JavaScript 中的主要内容,如果未能解决你的问题,请参考以下文章