ES6--默认参数表达式,参数变动

  今天发现个有趣的问题,传入默认参数是个函数时,自定义参数回变动。

  先上例子再说

let value = 5;
function getValue() {
    return value++;
}

function add(first, second = getValue()) {
    return first+second;
}
console.log(add(1, 2)); // 不调用getValue()
console.log(value);
console.log(add(1));  // 调用getValue()
console.log(value);
console.log(add(1, 2));  // 不调用getValue()

打印结果

3
5
6
6
3

对于例子解释:

  如果不传入最后一个整数,就会调用getValue()函数得到正确的默认值。

  切记,初次解析函数声明时不会调用getValue()方法,当调用add()函数且不传入第二个参数时才会调用。当调用getValue()时,add()的第二个默认参数值每次都会改变。这个可以在做其他封装时做参考。

原文地址:https://www.cnblogs.com/yyy6/p/8295485.html