ES 6 的块级作用域
let 实际上为JavaScript 新增了块级作用域。
function f1()
{
let n = 5;
if(true)
{
let n = 10 ;
}
console.log(n); // 5
}
上面的函数有两个代码块,都声明了变量 n ,运行后输出 5 。这表示外层代码块不受内层代码块的影响。如果两次都使用 var 定义变量 n ,最后输出的值才是 10.
ES 6 允许块级作用域任意嵌套。
{{{ let insane = "Hello World"}
console.log(insane)//报错
}}
上面代码使用了一个3层的块级作用域。外层作用域无法读取内层作用域的变量.
内层作用域可以定义外层作用域的同名变量。
{{
let insane = "Hello World"
{ let insane = "Hello World"}
}}
块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
//IIFE写法
(function(){
}());
//块级作用域写法
{
let tmp = ...;
...
}