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存在。
我传递一个数组(顺便说一下,参数的类型参数是对象)[3,5,6]并获取第一个元素。为什么这样? 对我来说,现在看来,我有功能,输出其参数错误。例如: '功能测试(arg){ console.log(arg); } test([1,2,3])// outputs [1,2,3]' 但我收到了这样的内容: 'test([1,2,3])// [1]' – tawreon
图像.apply()将给定的数组映射到函数参数。它遍历给定数组的所有元素,所以说,并映射每个匹配。你只需要匹配参数[0],因为foo只有一个参数 – scipper