Да, внутренняя работа отличается. Я считаю, что разница, которую вы здесь заметили, заключается в том, что в браузерах 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, которые служат учебниками для асинхронного программирования: