Вы правы, к нему добавится dummyAgain .Вы можете справиться с этим с помощью bind()
и отправить некоторые данные о событии:
var globalNum="dummy";
(function A()
{
$("#button").bind('click', {localNum: globalNum}, function(e)
{
$("#button").append(e.data.localNum);
});
})();
globalNum="dummyAgain";
Обратите внимание, что я немедленно выполняю функцию A
, поэтому обработчик щелчков присоединяется до значение globalNum
изменяется.Как отмечает @Andrew в своем комментарии, это тот же эффект, что и вовсе не использовать функцию «обтекания» A
.
То же решение без bind
:
(function()
{
var localNum = globalNum;
$("#button").click(function()
{
$("#button").append(localNum);
});
})();
Здесь анонимная функция полезна для захвата текущего значения globalNum
в локальной переменной.
Обновление:
Радиполнота (я надеюсь, @Andrew, вы не возражаете, что я разместил это здесь).«Самый крутой» способ, вероятно, состоит в том, чтобы использовать параметр для функции и немедленно выполнить функцию с этим параметром:
var globalNum="dummy";
(function(globalNum)
{
$("#button").click(function()
{
$("#button").append(globalNum);
});
})(globalNum);
globalNum="dummyAgain";
«Уловка» заключается в том, что имя параметра и имя глобальной переменнойодинаковы.
Это также очень часто используется для ссылки на некоторый объект с более коротким идентификатором без загрязнения глобального пространства имен, например, с помощью jQuery:
(function($) {
// jQuery == $
})(jQuery)