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

Итак, допустим, это мой код:

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
    }
})

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

Отношении

0
alexandernst 22 Янв 2013 в 14:01

2 ответа

Лучший ответ

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

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

1
Anthony Grist 22 Янв 2013 в 10:04

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

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

2
Richard Connamacher 22 Янв 2013 в 10:05