一直以来这个概念混沌不清,时而以为{}中的都是局部,时而以为{}不能限制变量范围;
在JavaScript语法中,出现{}的语句情况如下:
//空块作用域 {} //条件语句 if(){} else{} switch(){} while(){} //循环 for(){} //对象 var obj = {}; //函数 funciton fun(){}
只有在函数中声明的变量才是局部变量,在其他块作用域中声明的都是全局变量(ES5语法 var)
{ var one = "空 作用域块"; } if([]){ var two = "if 作用域块"; } function fun(){ var three = "函数 作用域块"; } console.log(one) console.log(two) console.log(three) //报错,变量为定义
在ES6 中可以通过 let 在任意块作用域中声明局部变量;
let 使得{}具有了真正的块作用域的效果;
{ let two ="two" } console.log(two) //输出结果 VM610:1 Uncaught ReferenceError: two is not defined