es6 for循环变量作用域

摩羯座的黄小姐 发布于 2018/05/02 15:30
阅读 167
收藏 0

【领华为电脑包】容器化时代到来!跳转机分配问题终于“有救”了!>>>

今天看阮一峰老师写得es6,说这段代码会输出三次abc,为什么我的控制台只输出了一次?

加载中
0
摩羯座的黄小姐
摩羯座的黄小姐

引用来自“vikon”的评论

试了一下,babel应该是这样简单地编译了一下,没有完全实现到let的那个作用域。所以和直接运行的不同。代码应该是编译成了。

for (var i = 0; i < 3; i++) {
  var i = "abc";
  console.log(i);
}

所以你看i是个循环变量,但是在里面被改掉了。

嗯,非常感谢

0
vikon
vikon

明明循环了3次了啊,你在哪里执行的,有些控制台,像chrome的,连续打多次同样的会只输出一次,不过会有一个数字显示多少次了。

0
摩羯座的黄小姐
摩羯座的黄小姐

引用来自“vikon”的评论

明明循环了3次了啊,你在哪里执行的,有些控制台,像chrome的,连续打多次同样的会只输出一次,不过会有一个数字显示多少次了。

这是输出了一次吧,前面没有3呢

0
vikon
vikon

直接在里面执行,显示出来了3次。

0
摩羯座的黄小姐
摩羯座的黄小姐

引用来自“vikon”的评论

直接在里面执行,显示出来了3次。

是呢,这样结果是对的,为什么我搭建了babel的环境,执行结果就不对呢?

第一个结果应该是3次abc

第二个结果应该是

报错ReferenceError

 

两个结果都不对

vikon
vikon
第二个的话let bar=2要放在console.log(bar)之前。因为let和var不同了。不过用var也应该习惯把定义放在使用之前。 前面为什么输出1个的话,要看是不是babel编译出来的代码了。
0
vikon
vikon

试了一下,babel应该是这样简单地编译了一下,没有完全实现到let的那个作用域。所以和直接运行的不同。代码应该是编译成了。

for (var i = 0; i < 3; i++) {
  var i = "abc";
  console.log(i);
}

所以你看i是个循环变量,但是在里面被改掉了。

返回顶部
顶部