2013-10-09 2 views
1

У меня есть обратный вызов без параметров и хранится в объекте, без исполнения, как так:Передача функции JavaScript без выполнения

{callback:function(){ do my thing }} 

Тогда я понял, что мне нужно отправить по некоторым параметрам, и все внезапно JS выполняет функцию при обнаружении:

{callback:(function(e){ do my thing with e })(event)} 

Есть ли способ сделать это без его немедленного выполнения?

+2

Ну, это [Немедленно Срабатывает функция Expression] (http://benalman.com/news/2010/11/immediately-invoked-function-expression/), так что нет. Любая причина, по которой вам нужно использовать IIFE в этом случае? – Andy

+0

Если вам нужны некоторые значения для настройки вашей функции, просто закройте их. Ваша функция может получить к ним доступ, и вам не нужно передавать их. – mccainz

ответ

4

Проблема заключается во втором фрагменте, который вы вызываете с помощью функции (event).

Вы просто должны быть в состоянии удалить его, а когда обратный вызов выполняется, если событие передается функции обратного вызова будет e:

{callback:function(e){ do my thing with e }} 
+0

Вам даже не нужны открывающиеся и закрывающиеся круглые скобки. – Andy

+0

@ Andy, это была ошибка :(Я исправил это. – marteljn

+0

Это определенно останавливает проблему выполнения, и именно так я начал, однако параметр не имеет значения. Он не определен при выполнении. :(Я должен уточнить, и, возможно, это моя проблема: у меня есть память в момент сохранения ее в переменной обратного вызова в надежде, что она будет сохранена в будущем исполнении. –

0

Это исполнение из-за скобки здесь - (event)

Этот параметр определен в объявлении функции - function(e)

Необходимо передать этот параметр, где ваш код клиента выполняет обратный вызов, например

if(thisCondition) { 
    callback(event) 
} 
Смежные вопросы