为什么即使将参数作为命名参数传递,参数的顺序也保持不变?在JavaScript中

时间:2018-07-10 07:36:38

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

例如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
  

偶数参数也作为命名参数传递,

那是为什么?

2 个答案:

答案 0 :(得分:2)

  

甚至将参数作为命名参数传递,

没有命名参数。

dfde(age = 27, name = "dfd")

与以下相同:

dfde(27, "dfd")

(另外age = 27创建一个新的全局变量年龄并为其分配值)


要在js中使用诸如命名参数之类的东西,您必须传递一个对象文字并对其进行解构:

function dfde({name, age}) {
  console.log(name, age);
}

dfde({ name: "dfd", age: 27 });
// Same as
dfde({ age: 27, name: "dfd" });

答案 1 :(得分:0)

发生这种情况是因为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