2013-01-22 16 views
0

У меня есть простой resizable div (достигнутый с jQuery's resizable), и я обрабатываю событие изменения размера с помощью функции.Обратные обратные вызовы

Итак, давайте скажем, что мой код:

var a = ... 
$(div).resizable({ 
    options go here... 

    resize: function(e, ui){ 
     make some operations with a 
     ... 
     ... 
     keep making operations with a 
     ... 
     ... 
     ok, we're done 
    } 
}) 

Теперь, скажем, изменение размера обратного вызова вызывается много раз в течение короткого периода времени. Как будет обрабатывать javascript? Будут ли обратные вызовы перекрывать использование «a»? (Обратите внимание, что «a» является глобальным var!). Я уверен с этим кодом или может быть какой-то конфликт?

С уважением

ответ

1

JavaScript является однопоточным, так что вызовы функций не могут «Перекрытие». Если вы запускаете событие несколько раз, то функция выполняется полностью (за вычетом любых асинхронных функций, которые она может вызывать) в ответ на первый запуск, прежде чем она будет выполнена снова для обработки последующих триггеров.

Однако изменения в a в один звонок по-прежнему будут выполняться, когда функция будет выполнена снова, поэтому, если она полагается на значение a, вы можете столкнуться с проблемами - это сводится к тому, что именно эта функция выполняет с переменная.

+0

Ну, я сохраняю положение X/Y мыши, используя event.screenX/Y. Я знаю, что, возможно, какой-то обратный вызов может быть вызван в другом порядке, чем изменение координат мыши, но это не имеет значения, поскольку только одна функция обратного вызова обращается к '' 'a''' в одно и то же время. – alexandernst

2

Если вы спрашиваете о безопасности потоков, JavaScript является однопоточным. Подобную функцию можно запускать только по одному, независимо от того, как часто она называется.

Таким образом, вы должны быть в безопасности.

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