2012-04-04 2 views
2

Я пытаюсь сделать следующее:JavaScript Anonymous Функция С помощью параметров из вызова()

function main(callback) { 
    $.ajax('server-side', function() { 
     this.callback.call("hello"); 
    }.bind({ callback: callback }); 
} 

main(function(response) { 
    alert(response); 
}); 

Response является undefined, я бы ожидать, что это будет "hello". Любые идеи почему?

+0

вы написали «ответ печати», но печать не существует в javascript. – mpm

ответ

4

call Первый аргумент должен быть ссылкой на «это». Быть «этим» - контекст, в котором вы хотите выполнить свою функцию. Call function Mozila MDN

+0

Спасибо, что это ответ. – Justin

+1

Вы можете опустить часть .call и просто сказать this.callback ("hello"). И вы можете опустить все вещи привязки и просто использовать параметр обратного вызова непосредственно как обратный вызов («привет»). – nnnnnn

1

Вы писали:

function main(callback) { 
    $.ajax('server-side', function() { 
     this.callback.call("hello"); 
    }.bind({ callback: callback }); 
} 

main(function(response) { 
    print response; 
}); 

печати оленья кожа существует в JavaScript.

тогда Вы писали this.callback.call, что неправильно

вы должны написать

callback.call(this,"hello") , 

просто проверить функцию вызова подпись.

+0

На самом деле нужно 'this' из-за bind() и привязки объекта, содержащего обратный вызов. Необходимо использовать bind(), потому что к моменту, когда обратный вызов срабатывает из события ajax, переданный в параметре 'callback' будет недоступен. – Justin

+0

@Justin - параметр обратного вызова функции main() по-прежнему будет доступен, когда обратный вызов ajax будет работать, даже если main() будет завершен к тому времени, из-за магии закрытия. Попробуйте и посмотрите ... – nnnnnn

Смежные вопросы