- 默认值
- 默认值表达式
需要注意的是,这种默认值和默认表达式在IE的最新版本中仍然没有得到兼容,只能通过编译转码的方式降级到ES5使用。
一、默认值
在函数声明时可以给形参赋默认值,当调用函数时不传入或者传入undefined的时候,函数会使用默认值进行计算。
示例:
1 function foo(x = 11,y = 31){ 2 console.log(x + y); 3 } 4 foo( null,6); // 6 5 foo(undefined, 10); //21
ES5编译结果:
1 "use strict"; 2 3 function foo() { 4 var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 11; 5 var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 31; 6 console.log(x + y); 7 } 8 9 foo(null, 6); // 6 10 11 foo(undefined, 10); //21
二、默认值表达式
在函数声明时,形参可以是一个计算表达式,当调用函数执行时不传参或者传入undefined就使用计算表达式计算的值作为参数的值。
示例:
1 let a = 10; 2 function bar(val){ 3 return a + val; 4 } 5 function foo(x = a + 5, y = bar(x)){ 6 console.log(x, y); 7 } 8 foo(); // 15 25 9 foo(3); // 3 13 10 foo(undefined, 10); // 15 10
ES5编译结果:
1 "use strict"; 2 3 var a = 10; 4 5 function bar(val) { 6 return a + val; 7 } 8 9 function foo() { 10 var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : a + 5; 11 var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : bar(x); 12 console.log(x, y); 13 } 14 15 foo(); // 15 25 16 17 foo(3); // 3 13 18 19 foo(undefined, 10); // 15 10