关于for循环的一些个人理解

关于for循环作用域的一些理解

我们知道JS中变量的作用域在ES6之前,只有两种,一是全局作用域,另一种是函数作用域,那么对于一个比较特殊的存在,for循环的作用域是怎样的呢?

我们先来看一个简单的for循环例子:

for (var i=0;i<5;i++) {
	console.log(i);
}
console.log('我是外面的'+i);

//  0, 1, 2, 3, 4, 我是外面的5

很明显,小括号里面的变量,是全局变量。并且在外面访问i的时候,访问到的是for循环执行完之后的值。

我们再看一个例子:

for (var i=0;i<5;i++) {
      var j = 10;
      console.log(i);
    }
console.log('我是外面的'+i);
console.log(j);

//  0, 1, 2, 3, 4, 我是外面的5, 10 

也很明显,for循环中,{}里的作用域也是全局作用域,在外面可以访问。

我们再来一个例子:

for (var i=0;i<5;i++) {
      var f1 = function() {
        var k = 100;
        return k;
      };
    }
console.log(k);

// k is not defined

可以看出,for循环内函数定义的变量,的确是函数作用域的,外面不能访问。

**

综上所述,其实for循环本身,无论的小括号内,还是大括号内的代码块,都是全局作用域的,并不是函数作用域。而for循环内函数定义的变量,则是函数作用域。

**

ES6之后加入了let,来定义块级作用域的变量。那么如果用let来定义for循环的变量会怎样呢?

for (let i=0;i<5;i++) {
	  let j = 99;
      console.log(i);
    }
 console.log(i);
 console.log(j);
// 0, 1, 2, 3, 4, i is not defined, j is not defined

在使用let定义变量后,外面是不能访问for循环里定义的变量的,此时for循环内的变量只能在for循环的块级作用域中访问。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值