У меня был коллега, спросите меня, почему он не смог получить доступ к параметру события из функции обратного вызова. Оказывается, что jquery, кажется, устанавливает событие в null после завершения вызова, и создание временной локальной переменной устраняет проблему (см. Ниже).Почему переменные внутри функций видимы для функций обратного вызова, объявленных внутри этой функции?
Тогда это заставило меня задуматься, почему «сообщение» доступно даже для обратного вызова. Может кто-нибудь объяснить?
$('some seletor').click({msg: message},function(event){
alert(event.data.msg); //event.data.msg is not available to the json callback because event is null
var message = event.data.msg; //message will be available to the callback...why?
$.getJSON('ajax/test.json', function(data) {
alert(message); //works ok - why is the message variable visible here at all, should it not have gone out of scope when the above function ended?
alert(event.data.msg); //will crash, seems that event has been set to null by the framework after the function finished
});
});
Из-за закрытия. Подробнее читайте здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures –
+1 для Клауса также (это была ссылка, которую я использовал для ее понимания) – jax