#一、函数参数的默认值
1. 基本用法
ES6 之前不能指定函数参数默认值,只能使用变通的方式
function log(x, y) {
y = y || "Word";
console.log(x, y);
}
log("Hello"); // Hello World
log("Hello", "China"); // Hello China
log("Hello", ""); // Hello World
当第三个参数传空字符串时,仍然改为了默认值,所以为避免还需要判断是否赋值了
function log(x, y) {
if (typeof y === "undefined") {
y = y || "Word";
}
console.log(x, y);
}
现在 ES6 支持直接在参数上面赋默认值,并且时默认声明,在函数体内不能用 let 或 const 再次声明。并且注意用参数默认值时,不能有同名参数,否则报错,如果参数默认值是表达式,每次都要重新计算表达式
let x = 99;
function foo(p = x + 1) {
console.log(p);
}
foo(); // 100
x = 100;
foo(); // 101
2. 作用域
设置参数默认值后,函数声明进行初始化的时候,参数会形成单独的作用域,初始化结束后,作用域就会消失。
var x = 1;
function f(x, y = x) {
console.log(y);
}
f(2); //2
参数 x 指向了第一个 x,形成了单独的作用域,所以指向了参数 x 而不是全局 x,所以输出 2,如果没有参数传入,x 为 undefined,输出 un