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的作用域。(情况①除外,情况①沿用已经定义的作用域,也就是接盘)。

 

你可能感兴趣的:(java,script,javascript,js,java)