我正在使用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: undefined
和secondValue: 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 = 3
将secondValue
设置为3
并得出值3
,即然后传入test
)。要使用
test
和3
调用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/