JavaScript: Можно ли передать переменную в функцию обратного вызова, назначенную переменной?
Многие говорят, что в комментариях это слишком много, что заставило меня не решаться спросить об этом, но я все еще не нашел решения в своих ответах, главным образом потому, что (1) они обычно используют jQuery и ( 2) вопросы обычно содержат технические вопросы, которые я не понимаю.
У меня есть функция с переменной внутри. Переменной присваивается функция. Я уверен, что эта концепция не является исключительной для AJAX, но это контекст, в котором я его использую, если это имеет значение.
function iClick(this)
{
var foo = "I would like to pass this.";
ajax.onreadystatechange = function (foo) { alert(foo); }
}
Я хочу передать переменную в функцию. Однако, поскольку нет оригинального объявления функции, как указать параметры? Могу ли я это сделать?
Ответы
Ответ 1
Просто не объявляйте эту переменную как параметр в вашей анонимной функции, например:
function iClick(this)
{
var foo = "I would like to pass this.";
ajax.onreadystatechange = function () { alert(foo); }
}
Когда вы вызываете первый параметр foo
, он вызывает вызов, вызывающий этот обратный вызов в этом foo
внутри функции. Если вы хотите ссылаться на ранее объявленную переменную, просто сделайте это, убедитесь, что вы не используете параметр с тем же именем.
Ответ 2
Вы можете создать такую функцию, как
var c="hello";
(function(b){
alert(b)
})(c);
Результатом будет "привет"
Ответ 3
Вы также можете это сделать, но, возможно, это не нужно:
function iClick(this)
{
var foo = "I would like to pass this.";
ajax.onreadystatechange = (function(thevar) {
return function () { alert(thevar); };
})(foo);
}
Ответ 4
Я верю, что вы хотели чего-то подобного
function handleAjaxRequest(params) {
var context = {'b':'inner', 'c': params['c']};
function rendered(html) {
// render
}
function gotPart(part) {
context['a'] = part;
engine.render(context).addCallback(rendered);
}
ajax.getPart(params).addCallback(gotPart);
}
Ответ 5
Как сказал @John Hartsock, ответ, который каждый должен запомнить, - это
var c="hello";
(function(b){
alert(b)
})(c);
И это очень важно, например, в цикле for
, когда внутри него есть некоторая функция async, потому что в противном случае вы не получите правильный элемент.
Скажи мне, что здесь происходит?
for (var i=0; i<5; i++){
setTimeout(function(){
console.log(i);
}, 1000);
}