В первом случае вы отслеживаете все итерации, которые подошли по условию выполнения цикла (b<12)
b=10, b=10+1, b=10+1
Во втором случае вы отслеживаете результат последней итерации (из-за которой цикл завершился)
b=10+1+1
-Первый круг: цикл сперва берёт b=10 , сравнивает с условием b<12, затем выполняет инструкцию в фигурных скобках, и после этого делает b++
-Второй круг: цикл берёт уже b=11, сравнивает с условием b<12, затем выполняет инструкцию в фигурных скобках, и после этого снова делает b++
-Третий круг: цикл берёт b=12, сравнивает с условием b<12, и понимает, что пора закончить работу.
Это работает,как бесконечный вложенный if(){}
let b=10;
if(b<12){
console.log(b);
b++;
if(b<12){
console.log(b);
b++;
if(b<12){
console.log(b);
b++;
if... // и так далее
}
}
}