Как бороться с анонимными функциями в функциях JavaScript? - PullRequest
3 голосов
/ 24 марта 2011

Мне нужно сохранить анонимную функцию, переданную в качестве аргумента моей «именованной» функции в Javascript, а затем вызвать ее позже.

Как я могу это сделать?Я уже знаю, как передать анонимную функцию в качестве аргумента, но я не знаю, как обращаться с ней, когда я «на другой стороне» кода.

Спасибо

Ответы [ 4 ]

5 голосов
/ 24 марта 2011

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

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

function myFunc(anonymous){
    var arg1;
    anonymous(arg1);
}

myFunc(function(arg1){console.log(arg1)});
1 голос
/ 24 марта 2011

Вот базовый пример:

function Foo(func) {
    this.Func = func;
    this.Activate = function() {
        this.Func();
    };
}

var foo = new Foo(function() { alert("activated"); });
foo.Activate();

Я полагаю, что вы пропустили использование () для "активации" функции - насколько я понимаю, вы достигли точки "сохранения" функции в переменной.

1 голос
/ 24 марта 2011

Просто позвоните, используя имя параметра.

function callThisLater(laterFunction) {
  // ...
  laterFunction(args);
}

callThisLater(function (arg1) {
    alert("We've been called!");
});
0 голосов
/ 24 марта 2011

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

...