ES5实现ES6的let

块级作用域

在javascript中只有全局作用域和函数作用域,并不存在块级作用域。这样,在使用时就会出现一些问题。 下面我们先来举例说明let块级作用域的使用。

{
  var a = 1;
  let b = 2;
}

console.log(a);
console.log(b);

我们得到的结果如下图所示:

也就是说,var声明的变量由于不存在块级作用域所以可以在全局环境中调用,而let声明的变量由于存在块级作用域所以不能在全局环境中调用。

由以上的分析可知,我们可以通过模拟块级作用域来实现let。

function outputNum(count){
//块级作用域
  (function(){
    for(var i = 0; i < count; i ++){
      console.log(i)
    }
  })();
  console.log(i)
}

outputNum(5)                                                                                                                                                                                                                                                                                                                                                            
Screenshot from 2017-08-22 14-24-29.png

我们可以看到通过使用立即执行函数,变量i只会在for循环的语句块中有定义,循环一旦结束,变量i就会被销毁,循环外面就访问不到变量i了。

推荐阅读更多精彩内容