Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Контекст функции при вызове по таймеру (https://javascript.ru/forum/misc/42884-kontekst-funkcii-pri-vyzove-po-tajjmeru.html)

BETEPAH 14.11.2013 00:31

Цитата:

Сообщение от Bombus
Мне показалось что в вашем коде пропущена строка
point = 'finish';
в конце функции printNumbersInterval20_100, т.к. в логах занчения point чередуются между 'start' и 'finish'.

Нет, я эту строку убрал специально, чтоб показать, что "немного измененный вариант исходного кода" ни о чем не говорит. Он лишь говорит, что строка 8 срабатывает быстрее, чем строка 6 в первый раз. Чередование показал, чтоб было нагляднее, как это работает.

Rise 14.11.2013 00:40

Bombus, Потому что выполнение кода не останавливается на timerId а идет дальше выполняя point = 'finish' (timerId запускается через 100мс), поэтому в логах полный finish.

BETEPAH 14.11.2013 00:55

Цитата:

Сообщение от Rise
Потому что выполнение кода не останавливается на timerId а идет дальше выполняя point = 'finish' (timerId запускается через 100мс), поэтому в логах полный finish.

Я в курсе. Именно это и втолковывать пытаюсь ;)

Bombus 14.11.2013 01:10

Все же вопроса про finish и не было. Весь вопрос был в механизме передачи данных для функции выполняемой по таймеру. Когда читал статью в учебнике, там было сказано: "Вызов через setTimeout не передаёт контекст this. В частности, вызов метода объекта через setTimeout сработает в глобальном контексте". Т.е. можно предположить, что раз this не передается, да и контекст выполнения глобальный, то переменная i (из примера) передаваться не должна. А она по факту передавалась, пример работал.

ksa 14.11.2013 08:35

Цитата:

Сообщение от Bombus
предложу немного измененный вариант исходного кода

Т.е. разницы между первым вариантом и вторым ты не улавливаешь? :)

ksa 14.11.2013 08:37

Цитата:

Сообщение от Bombus
Т.е. можно предположить, что раз this не передается, да и контекст выполнения глобальный, то переменная i (из примера) передаваться не должна.

Причем тут полотенце?! (с) :D


Часовой пояс GMT +3, время: 08:53.