在浏览JavaScript功能时,我在同一函数中使用了默认参数和传播语法。
let whatIsThis = (a, b = 2, ...c) => {
console.log("a = " + a, "b = " + b,"c = " + c)
}
whatIsThis(a = 1, c = [2,3,4,5,6,7,8])
运行它之后,我希望输出如下:
"a = 1"
"b = 2"
"c = 2,3,4,5,6,7,8"
但是我却得到了:
"a = 1"
"b = 2,3,4,5,6,7,8"
"c = "
为什么这没用?
答案 0 :(得分:4)
这是因为您无法将命名参数传递给JavaScript中的函数。当您执行whatIsThis(a = 1,c = [2,3,4,5,6,7,8])时,真正的意思是whatIsThis(1,[2,3,4,5,6,7,8] ])(因为a = 1语句返回1)。
您可以做的是将默认参数移到末尾(通常是一种好习惯),或者将参数包装在对象中。例如
let whatIsThis = ({a, b = 2, c}) => {
console.log("a = " + a, "b = " + b,"c = " + c)
}
whatIsThis({a: 1, c: [2,3,4,5,6,7,8]})
答案 1 :(得分:0)
您需要使用whatIsThis(a = 1, undefined , c = [2,3,4,5,6,7,8])
进行调用,因为您在函数参数的中间使用了默认参数,因此应使用undefined
来使用默认值。
let whatIsThis = (a, b = 2, ...c) => {
console.log("a = " + a, "b = " + b,"c = " + c)
}
whatIsThis(a = 1, undefined , c = [2,3,4,5,6,7,8])
答案 2 :(得分:0)
JavaScript没有命名参数。仅根据位置 将参数分配给参数。您不能按名称分配参数 ,也不能简单地跳过class User < ApllicationRecord
validates :username, presence: true
# ...
end
参数。这个:
b
等效于:
whatIsThis(a = 1, c = [2,3,4,5,6,7,8])
a = 1;
c = [2,3,4,5,6,7,8];
whatIsThis(a, c);
是分配操作,用于创建新的全局变量;它与函数的参数a = 1
无关。
答案 3 :(得分:0)
您可以将undefined用于第二个参数,并将spread syntax ...
用于使用rest parameters ...
收集的函数的所有其他参数。
Javasscript没有命名参数。
您需要以与函数签名相同的顺序移交参数。
List<Client> clients1 = pc.getClients();
List<Client> clients2 =new ArrayList<Client>();
if (clients1 != null) {
for (Client tc : clients1) {
tc.setClientId(tc.getClientId().replaceAll("\\p{C}", ""));
tc.setClientName(tc.getClientName().replaceAll("\\p{C}", ""));
tc.setCallFirstName(tc.getClientFirstName().replaceAll("\\{C}",""));
clients2.add(tc);
}
}
pc.setClients(client2)
答案 4 :(得分:0)
功能参数的顺序很重要。在这种情况下,函数顺序为(a, b = 2, ...c)
,但是仅使用两个参数whatIsThis(a = 1, c = [2,3,4,5,6,7,8])
调用函数。
因此,基本上,在调用函数时参数c
是未定义的,而参数b
则指向数组[2,3,4,5,6,7,8]
。
还请注意,调用类似whatIsThis(a = 1, c = [2,3,4,5,6,7,8])
的函数将导致某些整理工具和IDE引发错误。