es6中的块级作用域
之前在看360的培训课程时,知道了{...}是个块级作用域,错误的认为{...}中声明的函数变量都不会被外界访问到,在看了你不知道的JS之后,发现并不是这样的。在块级作用域中使用let声明的变量外界无法访问到。
eg:
var foo = true; if (foo) { let bar = foo * 2; bar = something( bar ); console.log( bar ); } c onsole.log( bar ); // ReferenceError
let 关键字可以将变量绑定到所在的任意作用域中(通常是 { .. } 内部)。 换句话说, let为其声明的变量隐式地了所在的块作用域。
但是这种方式是隐式的,如果没有特别注意哪些块级作用域中有绑定的变量,程序变大了之后,容易造成混乱,所以最好为块作用域显式地创造块来部分解决这个问题。
1 var foo = true; 2 if (foo) { 3 { // <-- 显式的快 4 let bar = foo * 2; 5 bar = something( bar ); 6 console.log( bar ); 7 } 8 } 9 console.log( bar ); // ReferenceError
块级作用域的优点:
避免变量冲突,比如程序中加载了多个第三方库的时候,如果没有妥善地将内部私有函数或变量隐藏起来,就很容易引发变量冲突;
可以方便的进行模块管理;
利于内存回收;(块级作用域里声明的变量在块级作用域执行完之后会全部销毁)
时间: 2024-10-27 11:33:33