JavaScript / JQuery - вы можете передать ссылку на функцию, а затем выполнить ее? - PullRequest
1 голос
/ 12 октября 2010

Исходя из приведенного ниже примера JavaScript, есть ли способ передать ссылку на функцию f в функцию promptForProceed и выполнить ее условно в promptForProceed?

Не могли бы вы сделать это?если функция f принимает некоторые параметры (например: f(a, b, c) { ... })?

function f() {
    //Do stuff..
}

function promptForProceed(myFunction) {  // <------ PASS FUNCTION AS PARAMETER
    $("#div-dialog-proceed").dialog({
        modal: true,
        buttons: {
            "Stay on current page": function () {
                $(this).dialog("close");
            },
            "Continue": function () {
                $(this).dialog("close");
                myFunction(); // <---------  CALL FUNCTION
            }
        }
    });
}

Обновление : думаю, мне нравится возможность использования параметра анонимной функции:

promptForProceed(function() { //Do stuff like call f(a,b,c) });

Ответы [ 5 ]

3 голосов
/ 12 октября 2010

Да, но вам, вероятно, не следует называть их обоих f, иначе это может сбить с толку происходящим.Строка, которую вы вызвали f(), вызывает параметр, а не функцию f (если только это не то, что вы передали)

Чтобы передать параметры, передайте promptForProceed(myFunction, a, b, c), а затем вызовите с помощью myFunction(a, b, c)

2 голосов
/ 12 октября 2010

Да. Функции являются первоклассными объектами в JavaScript и могут передаваться как параметры.

На самом деле ваш синтаксис правильный. Должно работать уже:)

2 голосов
/ 12 октября 2010

конечно можно.Функции - это объекты!

1 голос
/ 12 октября 2010

Да, вы можете.То, что у вас есть, должно работать.Передача параметров тоже подойдет.

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

myFunction.call(object);

Метод apply позволяет передавать аргументы какмассив.

myFunction.apply([param1, param2]);

Кроме того, вы должны понимать «замыкания» и то, как работает область видимости при передаче функций вокруг, как это.http://en.wikipedia.org/wiki/Closure_(computer_science)#JavaScript

0 голосов
/ 12 октября 2010
promptForProceed(f, f_parameter)

Затем передайте f_parameter в f ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...