关于js中for循环不在括号内初始化变量,而自增语句用复制的形式时,第一次进入for循环会把自增语句执行一次(当做初始化变量的赋值语句)

事情起因

在平时练习封装一个10进制数转任意进制数的函数时(利用简单的栈结构实现),里面有一个步骤是把10进制数每次除以目标进制数的余数push进栈里。此时书中的做法是用到了while循环代码如下:

	  //假设 number值为4 base值为2
	  //书中写法:
	   while (number > 0) {
	    	console.log(number, 'number'); //此处number值为4 2 1
	    	rem = Math.floor(number % base)
	    	stack.push(rem)
	    	number = Math.floor(number / base)
	      }
	  
	 //第一次尝试将while循环改为for循环
	 for (number > 0; number = Math.floor(number / base);) {
	  		console.log(number, 'number');//此时number的值为2 1
	    	rem = Math.floor(number % base)
	    	stack.push(rem)
	 	}

分析原因

当没有在for循环括号内初始化变量值的时候(且在for循环外声明变量并且赋值)而你使变量自增的语句又是赋值语句时(a=a+1 而不是 a ++)此时for循环第一次会把你用于自增/减的赋值语句当做循环变量的初始化语句,对循环变量进行赋值所以第一次进去进行了一次赋值 及 number = Math.floor(number/base) = 2 而此时while 语句number的值依旧为4

验证

	 //改造之后的for循环
	  for (let i = number; i > 0; i = Math.floor(i / base)) {
	    console.log(i, 'i');//此时i的值为 4 2 1 
	    rem = Math.floor(i % base)
	    stack.push(rem)
	  }

最后用一个更简单的例子来证实

var a = 4
for (a > 0; a = a - 1;) {
  console.log(a);//打印每次循环A的值(  3 2 1 )
}
for (let i = a; i > 0; i = i - 1) {
  console.log(a);//打印每次循环A的值(4 3 2 1 )
}
while (a > 0) {
  console.log(a);//(4 3 2 1 )
  a = a - 1
}

结语

还不知道,是不是因为JavaScript语言本身的原因,后续还需要更多的验证。(写了自己人生第一篇博客,加油!)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值