【问题标题】: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 代码包含位置参数。当您使用命名参数时,函数将根据名称检查参数,当您传递位置参数时,它会使用参数的位置进行检查

标签: javascript python-3.x parameter-passing


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多