2015-09-08 2 views
1

Может кто-нибудь объяснить, почему результат этого бесконечного цикла?Бесконечная петля в консоли браузера

var name = true; 
var soloLoop = function() { 
    while (name) { 
    console.log(name); 
    name = false; 
    } 
}; 

soloLoop(); 
  • Примечание 1: Может быть воспроизведена только в консоли браузера.
  • Примечание 2: Воспроизводимо только с переменным «именем».
+8

Вы столкнулись с глобальным 'window.name', который может быть установлен только для строк. –

+0

Радости сдавать все в глобальном масштабе. – Nit

ответ

6

Когда вы объявляете переменные в глобальной области действия, как вы здесь делаете, они фактически содержатся как свойства глобального объекта, в данном случае window. window.name is something that already exists, и его можно установить только в строку.

Когда вы делаете:

var name = true; 

Это фактически установив window.name в "true". То же самое для name = false - он устанавливает его в "false". Поскольку "false" «правдивый», цикл while никогда не выйдет.

+0

ваш ответ не объясняет, почему он воспроизводится только в том случае, если код запущен из консоли браузера, в простом скрипте цикл выполняется только один раз. – micnic

+2

Он также будет воспроизводиться вне консоли, если он находится в глобальной области. Подобные jsfiddle и т. Д. Не будут находиться в глобальном масштабе. –

+0

true, я тестировал в среде jsfiddle и Node: P – micnic

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