Задать вопрос
@qo_0p

Необычное использование for или как это работает?

Наткнулся на код с нестандартным использованием цикла for (смотрите первый цикл) пытался осмыслить, но что-то не получается. Ребята, может объясните что это за конструкция, и как она работает? ссылка на jsfiddle
var canvas = document.body.appendChild(document.createElement("CANVAS")),ctx = canvas.getContext("2d"), starList = [], approx = 0.05, x_center = canvas.width >> 1, y_center = canvas.height >> 1, STAR_COUNT = 256, SCATTER = 50, SCALE = 2.5, DEPTH = 15, INIT_STAR_RANGE = 25, UPDATE_TIME = 16.666;//1

for(var i = STAR_COUNT; i--; starList.push({x: -INIT_STAR_RANGE + ((Math.random() * 2*INIT_STAR_RANGE) | 0), y: -INIT_STAR_RANGE + ((Math.random() * 2*INIT_STAR_RANGE) | 0), z: 1 + Math.random() * DEPTH}));//2

setInterval(function(){ctx.fillStyle = "#000"; //3
                       
ctx.fillRect(0, 0, canvas.width, canvas.height); //4
                       
for (i = 0; i < STAR_COUNT; ++i){((starList[i].z -= approx) < approx) && (starList[i] = {x: -INIT_STAR_RANGE + ((Math.random() * 2*INIT_STAR_RANGE) | 0),y: -INIT_STAR_RANGE + ((Math.random() * 2*INIT_STAR_RANGE) | 0),z: DEPTH}); //5
                                 
var shade = Math.floor((1 - starList[i].z / DEPTH) * 255); //6
 
ctx.beginPath(); //7
                                 
ctx.fillStyle = "rgb(" + shade + "," + shade + "," + shade + ")"; //8
                                 
ctx.arc(x_center + starList[i].x * (SCATTER / starList[i].z), y_center + starList[i].y * (SCATTER / starList[i].z), (1 - starList[i].z / DEPTH) * SCALE, 0, 2 * Math.PI, true); //9
                                 
ctx.fill(); //10
                                 
} //11
                       
}, UPDATE_TIME); //12
  • Вопрос задан
  • 293 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@dixoNich
frontend developer
for ([initial-expression]; [condition]; [final-expression])
statement

initial-expression // i = START_COUNT просто выражение
condition - выражение, которое вычисляется между операциями, пока true, следующая операция запускается, если false, то цикл закончится -//  i--, когда i станет 0, то мы выйдем из цикла
final-expression - выражение, которое выполняется после очередной итерации и всё

Можно переписать как-то так
for (var i = START_COUNT; i > 0; i--) { 
   starList.push...
}

Для чего... просто захотелось...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы