ES6 新规范中可以给函数的参数指定默认值。
浏览器支持:
//ES5 的一种变通方法
function run(x){
x = x === undefined ? 0 : x;
console.log(x)
}
run(); //0
run(false); //false
run(8); //8
//ES6 新增
function run(x=0){
console.log(x)
}
run(); //0
run(false); //false
run(8); //8
需要注意的几种情况:
//1.参数变量是默认声明的,所以不能用let或const再次声明。
function foo(x = 5) {
let x = 1; // 报错!
const x = 2; // 报错!
}
//2.使用参数默认值时,函数不能有同名参数。
function foo(x, x, y) {
} // 不报错
function foo(x, x, y = 1) {
} // 报错!
//3.参数默认值不是传值的,而是每次都重新计算默认值表达式的值。
let x = 99
function foo(p = x + 1) {
console.log(p);
}
foo(); // 100
x = 100;
foo(); // 101
//4.undefined 会触发该参数取默认值,null 则没有这个效果,
//并且设置了默认值的形参不能传空字符串参数。
function f(x, y = 5, z) {
return [x, y, z];
}
f(); // [undefined, 5, undefined]
f(1); // [1, 5, undefined]
f(1,undefined,null); // [1, 5, null]
f(1,,); // 报错!
f(1, ,2); // 报错!
//5.指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。
//也就是说,指定了默认值后,length属性将失真。
(function(...args) {
}).length // 0
(function (a) {
}).length