为啥参数的顺序保持不变,即使参数作为命名参数传递?在 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 中的主要内容,如果未能解决你的问题,请参考以下文章

将组合框作为参数传递给表单

UI和后台参数传递规则

为啥将函数作为函数的参数传递?

为啥数组不能作为函数参数传递?

将带引号的字符串传递给 system() 保持引号不变

为啥在将命令行图像文件中的参数作为参数传递时出现错误