Вызвать функцию Javascript с аргументом через указатель? - PullRequest
1 голос
/ 16 мая 2011

Как вы можете вызывать функцию в Javascript, передавая аргументы, используя указатель на функцию?

Пример:

function foo (a, callback) {    
        jQuery.post('/soon/check.json', { var:a }, function(resp) {
             callback(resp);
    }); 
}

function process_json(resp) {
  // Do something with resp
}

foo(bar, process_json);

"process_json" никогда не вызывается. В Firebug строка «process_json» передается в «foo», но я предположил, что это представляет указатель на функцию «process_json».

В Javascript нельзя ли вызывать функции через указатели и передавать аргументы?

Ответы [ 4 ]

6 голосов
/ 16 мая 2011

В Javascript нельзя ли вызывать функции через указатели и передавать аргументы?

Это, безусловно, возможно сделать.Все в вашем коде выглядит просто отлично для меня.Вы уверены, что вызывается обратный вызов $.post() (анонимная функция)?Является ли bar неопределенным, когда вызывается foo?

Для пояснения нам нужно вызывать функцию, используя строку, а не указатель на функцию.Возможно ли это?

Да.Если функция определена глобально, вы можете вызвать ее как свойство объекта window, например:

function foo () { /* snip */ }

var fn_name = 'foo';

window.foo();       // works
window['foo']();    // works
window[fn_name]();  // also works
0 голосов
/ 17 мая 2011

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

jQuery.post('/soon/check.json', { var:a }, function(resp) {...

Вы передаете обратный вызов, который будет вызываться после сообщения.остальное.Действительно ли анонимная функция, переданная в $.post, вызывается?

Надеюсь, это поможет

0 голосов
/ 17 мая 2011

Попробуйте это: http://jsfiddle.net/26naf/

Функция alert передается в foo по ссылке:

function foo(fref)
{
   fref("hi world");
}

foo(alert);

И это работает, как вы видите.

0 голосов
/ 16 мая 2011
var process_json = function(resp) {
  // Do something with resp
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...