Как понять решение задачи на JS?
Думаю если ничего не понял из задачи, то тема нихр#на не усвоена.
Вы, конечно, правы. НО, если вы реально решили научиться программировать, то вам придется свыкнуться с этим ощущением и работать над собой дальше. Потому как такие недопонимания будут возникать ооочень часто. Если вы чего-то еще не поняли, значит еще до этого не доросли (тут нужно правильно понимать). Не отчаивайтесь. Работайте дальше. Это же не уравнение или задача, где не узнав одно неизвестно невозможно решить задачу. В этом месте у вас будет пробел, но программировать вы все равно сможете. А когда наткнетесь на задачу, где нужно понять замыкания, то у вас будет реальная мотивация для этого.
Конечно, есть люди, у которых феноменальная память и отличная соображалка, но таких единицы. Они способны прочитав вводный курс, сразу круто программировать. Но остальная масса точно также натыкается на те же проблемы, что и вы. И тут нет ничего страшного, если вы что-то не понимаете.
Для всех стрелков вызов будет выдавать 10, потому что в момент вызова(а не создания) функция будет ссылаться на i = 10(на последнюю итерацию). Для того, чтобы сохранить значение переменной, нужно сделать сохранение ее в локальную. Например так:function makeArmy() {

  var shooters = [];

  for (var i = 0; i < 10; i++) {
    var shooter = (function() { // функция-стрелок
		var j = i; //сохраняем значение в локальную переменную
		return function() {          
			alert( j ); // выводит свой номер
		}
    })();
    shooters.push(shooter);
  }

  return shooters;
}

var army = makeArmy();
Вот здесь habrahabr.ru/post/38642 описана полностью твоя проблема и ее решение.