Можно ли передать функцию javascript с параметрами в качестве параметра?
Пример:
$(edit_link).click( changeViewMode( myvar ) );
Можно ли передать функцию javascript с параметрами в качестве параметра?
Пример:
$(edit_link).click( changeViewMode( myvar ) );
Используйте "закрытие":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Это создает анонимную временную оболочку функций, которая знает о параметре и передает ее фактической реализации обратного вызова.
Используйте Function.prototype.bind()
. Цитирование MDN:
Метод
bind()
создает новую функцию, которая при вызове имеет свое ключевое словоthis
, установленное на предоставленное значение, с заданной последовательностью аргументов, предшествующей любой, если новая функция называется.
Поддерживается всеми основными браузерами, включая IE9 +.
Ваш код должен выглядеть так:
$(edit_link).click(changeViewMode.bind(null, myvar));
Боковое примечание: я предполагаю, что вы находитесь в глобальном контексте, т.е. this
переменная window
; иначе используйте this
вместо null
.
Нет, но вы можете передать один без параметров и сделать это:
$(edit_link).click(
function() { changeViewMode(myvar); }
);
Итак, вы передаете анонимную функцию без параметров, эта функция затем вызывает вашу параметризованную функцию с переменной в закрытии
Да, вот так:
$(edit_link).click(function() { changeViewMode(myvar) });
Вы можете сделать это
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
а затем
function activate(callback){
callback && callback();
}
activate(callback);
Или, если ваш обратный вызов содержит более гибкую логику, вы можете передать объект.
Это пример, следующий за подходом Фердинанда Бейера:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
В этом примере "значение параметра" передается из функции1 в функцию3 через функцию2 с помощью обертки функции.