我正在使用ES6默认参数,但行为异常。

这是问题的简短示例:

function test(firstValue, secondValue=5){
  console.log("firstValue: " + firstValue);
  console.log("secondValue: " + secondValue);
  console.log("----------")
}

test(2, secondValue = 3)
test(secondValue = 3)


及其输出:

firstValue: 2
secondValue: 3
----------
firstValue: 3
secondValue: 5
----------


在第二种情况下,我希望使用firstValue: undefinedsecondValue: 3。这是正常现象吗?我想念什么吗?

最佳答案

当你做

test(2, secondValue = 3)


您实际上是在这样做:

secondValue = 3
test(2, 3)


第一部分(secondValue = 3)通过The Horror of Implicit Globals创建一个名为secondValue的全局变量。*与函数中的secondValue参数无关。 JavaScript没有命名参数。 (例如,拨打电话时,您不能说“ secondValue的值”,除非将其放在参数列表中的正确位置。如果要在通话时指定名称,则可以使用解构就像cubbuk points out一样,它实际上不是命名参数,但可以达到相同的目的。)

第二部分(将3传递到test)的发生是因为分配的结果是所分配的值(因此secondValue = 3secondValue设置为3并得出值3,即然后传入test)。

要使用test3调用secondValue,只需执行此操作。例如。:

test(2, 3);


如果要关闭第二个,将使用默认值:

test(2);


例:



function test(firstValue, secondValue=5){
  console.log("firstValue: " + firstValue);
  console.log("secondValue: " + secondValue);
  console.log("----------");
}

test(2, 3);
test(2);







*(这是我贫乏的小博客上的帖子)

关于javascript - ES6默认参数:值分配不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42458540/

10-15 19:57