Я пытаюсь рассказать о том, как работает javascript bind().
Я вижу, что если я делаю
var f = function (a) { ... }
var g = f.bind(obj);
g(1)
то f вызывается с obj
как this
и 1
как a
.
Я думал, что g - это функция-обертка вокруг f.
Но когда я делаю
var f = function (a) { ... }
var g = f.bind(obj);
g.call(1)
то f вызывается с 1
как this
и a
undefined.
Итак, кажется, что g не просто простая оболочка, но call
каким-то образом отличает нормальные и связанные функции.
Еще одна вещь: я не могу частично применять функцию больше раз.
var f = function (a) { ... }
var g = f.bind(obj);
var h = g.bind(1);
h();
Тогда f вызывается с obj
как this
и a
undefined.
В чем причина такого поведения?
Edit
Конструкции в этом вопросе на самом деле неправильны, см. принятый ответ о том, как им это нравится (в общем, я не заметил, что call
и bind
всегда должен иметь аргумент контекста в качестве первого аргумента).