Передача функции с параметрами в качестве параметра? - программирование
Подтвердить что ты не робот

Передача функции с параметрами в качестве параметра?

Можно ли передать функцию javascript с параметрами в качестве параметра?

Пример:

$(edit_link).click( changeViewMode( myvar ) );
4b9b3361

Ответ 1

Используйте "закрытие":

$(edit_link).click(function(){ return changeViewMode(myvar); });

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

Ответ 2

Используйте Function.prototype.bind(). Цитирование MDN:

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

Поддерживается всеми основными браузерами, включая IE9 +.

Ваш код должен выглядеть так:

$(edit_link).click(changeViewMode.bind(null, myvar));

Боковое примечание: я предполагаю, что вы находитесь в глобальном контексте, т.е. this переменная window; иначе используйте this вместо null.

Ответ 3

Нет, но вы можете передать один без параметров и сделать это:

$(edit_link).click(
  function() { changeViewMode(myvar); }
);

Итак, вы передаете анонимную функцию без параметров, эта функция затем вызывает вашу параметризованную функцию с переменной в закрытии

Ответ 4

Да, вот так:

$(edit_link).click(function() { changeViewMode(myvar) });

Ответ 5

Вы можете сделать это

var message  = 'Hello World';

var callback = function(){
alert(this)
}.bind(message);

а затем

function activate(callback){
  callback && callback();
}

activate(callback);

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

Демо

Ответ 6

Это пример, следующий за подходом Фердинанда Бейера:

function function1()
{
    function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
    $(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }

В этом примере "значение параметра" передается из функции1 в функцию3 через функцию2 с помощью обертки функции.