【问题标题】:Javascript arguments object parameter parsingJavascript arguments 对象参数解析
【发布时间】:2017-10-09 13:34:01
【问题描述】:

我在理解函数的参数对象如何解析方面遇到了问题。

我正在分析的代码:

function foo(something) {
    console.log(something); // outputs 3
    return this.a + something;
}

function bind(fn, obj) {
    return function () {
      return fn.apply(obj, arguments);
    };
}

var obj = {
   a: 2
};

var bar = bind(foo, obj);
var b = bar(3, 5, 6);

函数 foo 控制台记录其名为“something”的参数,它应该是参数对象。为什么我只传递了第一个参数而忽略了其他参数?我想我应该得到整个 arguments 对象。

【问题讨论】:

    标签: javascript parameters arguments


    【解决方案1】:

    使用 .apply() 可以将所有参数作为数组传递。这意味着,如果您有一个带有两个参数的函数,例如:

    functionWithTwo(a,b) {}
    

    您可以使用具有两个值的数组传递参数:

    [1,3]
    

    如果您现在传递一个包含 2 个以上字段的数组,其他字段将被忽略,因为您的目标函数只接受 2 个参数。

    这正是您的示例中发生的情况。您将数组 [3, 5, 6] 传递给仅接受 1 个参数(某物)的函数。所以只有第一个值 3 存在。

    【讨论】:

    • 我正在传递一个数组(顺便说一下,参数的类型是对象)[3, 5, 6] 并获取第一个它的第一个元素。为什么这样?对我来说,现在看起来我有函数,它输出它的参数是错误的。例如:function test(arg){ console.log(arg); } test([1,2,3]) // outputs [1,2,3] 但我得到的是这样的:test([1,2,3]) // [1]
    • .apply() 将给定数组映射到函数参数的图像。可以说,它遍历给定数组的所有元素,并映射每个匹配项。你只有一个参数 [0] 的匹配项,因为 foo 只有一个参数
    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2020-01-08
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2018-10-18
    相关资源
    最近更新 更多