今天看别人的代码时,看到他使用了 es6 的函数参数默认参数,不过我一下子没有看明白。大概我理解的函数参数的默认值是:
var e = function(d = 3) {
console.log(d);
}
e( ); // 3
e( 2 ); // 2
e(undefined); //3
e(null); // null
说是对于函数的参数 “严格等于” (===) undefined 的时候,触发默认值,比如空参数。但是 null 不行。但是此时 arguments === undfined; // false 。不知道这里严格等于 undefined 的是哪一个值?
但是对于函数的参数是对象的情况,我不知道我理解的对不对,总感觉非常绕。
function move({x = 0, y = 0} = {}) {
return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, 0]
move({}); // [0, 0]
move(); // [0, 0]
move() 的时候, 先不纠结于 arguments === undfined; // false 这一点,首先触发参数默认值为 {}, 接着需要使用到 x,y的时候,发现 x 和 y 都是 undefined , 从参数的默认值中去寻找 ,发现x = 0 , y = 0 的默默认值, 于是输出内容。
但是感觉这样的理解是有问题的。 阮老师的书上和网上的博客,通常对于这一概念就一笔带过,告诉了大家在函数中解构 和 默认参数一起使用就是这样。 但是我绕进去了,求教各位。