Javascript参数对象参数解析

问题描述:

我发出一个问题,理解函数的参数对象如何解析。Javascript参数对象参数解析

代码中,我正在分析:

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控制台记录其命名为“东西”的说法,这应该是参数对象。为什么我只得到第一个参数并忽略其他参数?我以为我应该得到整个参数对象。

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

functionWithTwo(a,b) {} 

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

[1,3] 

如果现在通过具有多于2个字段的阵列,其他人被忽略,因为你的目标函数只接受2个参数。

这是在你的例子中发生的事情。你将一个数组[3,5,6]传递给一个只支持1个参数(某物)的函数。所以只有第一个值3存在。

+0

我传递一个数组(顺便说一下,参数的类型参数是对象)[3,5,6]并获取第一个元素。为什么这样? 对我来说,现在看来,我有功能,输出其参数错误。例如: '功能测试(arg){ console.log(arg); } test([1,2,3])// outputs [1,2,3]' 但我收到了这样的内容: 'test([1,2,3])// [1]' – tawreon

+0

图像.apply()将给定的数组映射到函数参数。它遍历给定数组的所有元素,所以说,并映射每个匹配。你只需要匹配参数[0],因为foo只有一个参数 – scipper