Передача именованной функции в Javascript

Как вы передаете именованную функцию с параметрами, не вызывая ее.

Прямо сейчас единственное решение, которое у меня есть, похоже на взлом, но это передача безымянной функции, которая будет вызывать названную функцию.

callback(function(){foo(params);})

Есть ли лучший способ сделать это?

4 ответа

Решение

Код, который у вас есть сейчас, который упаковывает вызов в другую анонимную функцию, прекрасно подходит и широко используется в Javascript.

Если вы хотите удалить анонимную функцию, вы можете вместо этого использовать ссылку на функцию с bind() метод. Попробуй это:

callback(foo.bind(this, params));

документация bind()

Нет, есть несколько способов сделать это, но способ, которым вы пользуетесь, является самым популярным. Я знаю, что это кажется хакерским, но так оно и есть.

Вы могли бы также сделать

callback(foo.bind(this, params));

Ваша функция должна быть назначена переменной области видимости. Вы можете передать его с помощью этой переменной.

var func = function(){ foo(params); }
callback(func);

Если вы просто пытались вызвать foo напрямую, просто передайте это.

callback(foo);

Вы также можете просто передать функцию и использовать Javascript apply / call функции

callback(myFunc);

где обратный вызов определяется как:

function callback(func, params) {
    func.apply(null, params);
}

Для получения более подробной информации вы можете перейти к документации метода Apply в MDN.

Другие вопросы по тегам