Нет, они не одинаковы.
Цель объединения аргументов состоит в том, чтобы обеспечить способ частичного применения (или карри ) функции, предварительно заполнение аргументов при использовании bind
и возможность добавить больше позже, когда используется функция, которую возвращает bind
, например:
var obj = {
fx: function() {
alert(Array.prototype.join.call(arguments, ', '));
}
};
var fx2 = obj.fx.bind(obj, 1, 2, 3);
fx2(4, 5); // Alerts "1, 2, 3, 4, 5"
Как вы можете видеть в последних двух строках кода, когда я объявляю fx2
, я передаю obj
в качестве первого аргумента (это обеспечит контекст, используемый как переменная object
в bind
реализация), тогда я передаю значения 1
, 2
и 3
.
Эти значения хранятся в переменной args
внешнего замыкания bind
, затем, как вы видите в реализации bind
, возвращается другая функция.
Эта функция, возвращаемая в моем примере, является fx2
после присваивания, в последней строке, которую вы видите, я вызываю эту функцию, передавая два дополнительных аргумента.
Наконец, возвращенная функция будет вызывать obj.fx
с двумя списками аргументов, аргументами, которые мы предварительно заполняли при вызове bind
(1
, 2
, 3
) и аргументами, когда функция фактически выполнялась (4
5
).
Вот почему имеет смысл объединить два объекта аргумента.