• 3.4k

es6默认值问题

es6在函数参数中添加默认值,给其中一个参数赋值,有无默认值为什么arguments的输出结果会受到影响?

const fn1 = function(a = 7,b = 8, c = 9){
    a = 10;
    console.log(arguments)
}
const fn2 = function(a, b, c){
    a = 10;
    console.log(arguments)
}
fn1(1,2,3); //    输出结果:[1,2,3]
fn2(1,2,3); //    输出结果:[10,2,3]

这个输出结果我很费解,求告知。

阅读 662
评论
    3 个回答
    • 1.3k

    在非严格模式下, 直接操作实参a b c会改变arguments的值,

    // 加个严格模式
    'use strict'
    
    const fn2 = function(a, b, c){
        a = 10;
        console.log(arguments)
    }
    fn2(1,2,3); //    输出结果:[1,2,3]

    关于fn1,可以用babel测试%7B%0A%20%20%20%20a%20%3D%2010%3B%0A%20%20%20%20console.log(arguments)%0A%7D)查看

    $traceurRuntime.ModuleStore.getAnonymousModule(function() {
      "use strict";
      var fn1 = function() {
        var a = arguments[0] !== (void 0) ? arguments[0] : 7;
        var b = arguments[1] !== (void 0) ? arguments[1] : 8;
        var c = arguments[2] !== (void 0) ? arguments[2] : 9;
        a = 10;
        console.log(arguments);
      };
      return {};
    });
    //# sourceURL=traceured.js

    被转化成了 arguments赋值的形式,脱离了argument,所以不会影响.