let n = 5;
for (let a = 1, b = Math.pow(2, a); b <= n; a++) {
console.log(b);
}
我不明白为什么b
没有随着a
的增加而增加。我是否需要再次将a
传递给b
?
如果没有办法让这个循环以这种方式工作,有人能告诉我如何重写它使它工作吗?
一旦b
被初始化,你的代码永远不会改变它,所以循环条件总是为真。
你可以用
let n = 5;
for (b = 2; b <= n; b*=2) {
console.log(b);
}
b是值类型而不是引用类型。所以更新a不会自动更新b的值
你必须手动更新
for (let a = 1,b =Math.pow(2,a); b <= n; a++,b=Math.pow(2,a)) {
console.log(a);
}
是的,您必须再次将a
传递给b
,以便使您的代码工作,因为b
不会随着循环的进行而改变。下面是你如何重写你的代码来给它你想要的功能:
let n = 5;
let b;
for (let a = 1; b <= n; a++) {
b = Math.pow(2, a);
console.log(b);
}
你可以让它像下面这样工作。您的情况更可能适合while
或do while
循环。
let n = 5;
let a = 1;
while(powToA(a)<=n) {
console.log(powToA(a));
a++;
}
function powToA(a) {
return Math.pow(2, a);
}