写习惯了 C++ 后,在学习 JavaScript 时,发现设置函数默认参数的方法并不通用,便想找一种替代的实现方式,本文将记录以作备忘

众所周知,在 C++ 中可以为函数的参数设置默认值,调用该函数时,没有指定与形参相对应的实参就能自动使用默认参数

比如:

1
void test(int x, int y = 3, bool b = true);

当然,有个注意点是默认值必须从左至右开始后面都需要设置

现在想在 JavaScript 中使用这种形式,却是语法不支持的

所以有另一种写法来实现:

1
2
3
4
5
6
7
8
9
10
function test(x, y) 
{
var a = arguments[0] ? arguments[0] : 1; // 设置默认参数 x = 1
var b = arguments[1] ? arguments[1] : 2; // 设置默认参数 y = 2
return a + b;
}

test(); // 输出 3
test(5); // 输出 7
test(5, 10); // 输出 15

这是因为 JavaScript 函数中有个储存参数的数组 arguments,函数的参数会被编译器按顺序保存到这个数组中

一种更漂亮的写法:

1
2
3
4
5
6
7
function test(x, y) 
{
x = arguments[0] || 1;
y = arguments[1] || 2;

return x + y;
}