Почему мое время l oop регистрируется таким образом? - PullRequest
1 голос
/ 08 марта 2020

Почему мое время l oop регистрируется таким образом? Это потому, что внутренняя работа V8 и SpiderMonkey различается?

var counter = 0;
while (counter <= 10) {
    console.log(counter);
    counter++;
}

Примечание. Попробуйте использовать приведенный выше код на консоли Chrome и Firefox.

Это результаты, которые я получил при выполнении кода выше.

In Chrome:

In Chrome's Console

In Firefox:

In Firefox's Console

Почему зарегистрированные результаты отличаются? Что здесь происходит?

1 Ответ

3 голосов
/ 08 марта 2020

Да, внутренняя работа отличается. Я считаю, что разница, которую вы здесь заметили, заключается в том, что в браузерах WebKit, таких как Chrome и Safari, console.log является асинхронным, тогда как в Firefox (и Node.js) он является строго синхронным.

Я впервые прочитал об этом в книге Тревора Бернхема Asyn c JavaScript. Вы можете найти соответствующий раздел книги, перейдя по этой поисковой ссылке Google Книги для Asyn c JavaScript, и соответствующая страница должна быть первым ответом вверху.

WebKit console.log удивил многих разработчиков тем, что вел себя асинхронно.

Чтобы понять, что происходит, попробуйте просто ввести это в консоли:

var counter = 0
while (counter <= 10) { counter ++ }

Вы увидите, что это, естественно, само вернет значение 10. Это только окончательное значение counter в конце while l oop. Таким образом, поскольку console.log является синхронным в Firefox, операторы console.log начинаются одновременно с возвращаемым значением для while l oop, 10. Поскольку он является асинхронным в Chrome, возвращаемое значение while l oop ожидает возврата, пока все вызовы console.log не будут завершены. Разница в синхронном характере console.log между Chrome и Firefox зависит от того, возвращается ли это значение одновременно или после всех вызовов console.log. В этом суть разницы, которую вы заметили.

Если вы все еще в замешательстве, я рекомендую ознакомиться с концепцией асинхронного кода. Это концепция промежуточного уровня, так что все в порядке, если вы только начинаете и еще не дошли до asp. Приведенная выше книга является отличным ресурсом, но вы можете начать изучать основы в Mozilla Developer Network. Вот некоторые ресурсы для вас из MDN, которые служат учебниками для асинхронного программирования:

...