Java Script 中 for in 的 key 如果不用let 进行定义

Java Script 中 for  in 的 key 如果不用let 进行定义

先看如下JS代码

for (key in obj){

// 此处一些操作

}

通常,我们会将 key 使用 let 进行定义 即 for (let key in obj)

那么,如果我们不用let 进行定义会造成什么结果呢?

我们分为以下两种情况:

 

①key 在别处已有定义

有如下代码

for (key in obj){

alert(key);//被执行

}

alert(key);//在循环外,同样被执行

这说明,我们无意中创建了一个变量key ,并且key 的作用域不局限于for循环体中,我们在其外部也可以进行调用。

key 的作用域具体是什么呢?

如果除了此处(for),我们在别处还定义了一个let key (或者var key)

那在for(key in obj)中,我们其实没有定义一个key,而是进行了接盘

直观的说,如果我们之前定义了一个全局变量key,那么for循环中的key是对之前的全局变量进行沿用,for中的key,其作用域是和之前定义的key 相同的。

 

②key 仅在此处进行第一次声明

如①中代码所示的结果,key 在for 循环外依然可以进行调用,即使我们之前没有任何关于key 的声明

那么key 此时的作用域又是什么呢?答案:key 的作用域会顺着作用域链,一层一层向外。如此处,key 的作用域从for 向外一层,但又限制在for 的上一级作用域中,如:

function(){

     for(key in obj){

}

alert(key);// key 的作用域仅限于function内部

}

在function 外,我们就不能调用key。因为超出了key的作用域。(情况①除外,情况①沿用已经定义的作用域,也就是接盘)。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值