3

Как передать именованную функцию с параметрами без ее вызова.Передача именованной функции в Javascript

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

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

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

+1

Я думаю, что 'обратного вызова (foo.bind (PARAMS))' будет делать свою работу. –

ответ

2

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

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

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

bind() documentation

+0

Мне действительно нравится привязка. Это кажется интуитивным и элегантным. Хотя я беспокоюсь, что мой код может быть менее понятным или что я не совсем понимаю, что происходит в фоновом режиме. Из того, что я понимаю, bind просто создаст анонимную функцию и скопирует тело «целевой функции привязки» к новой анонимной функции. Это правильно? Есть ли какие-либо оговорки в использовании bind()? –

3

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

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

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

И это демонстрация: http://plnkr.co/edit/RLsp99itBG8PTEbyjZ7A?p=preview –

0

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

callback(myFunc); 

где обратного вызова определяется следующим образом:

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

Более подробно вы можете перейти к методу Apply metho d в MDN Here

0

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

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

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

callback(foo); 
Смежные вопросы