码迷,mamicode.com
首页 > 其他好文 > 详细

es6中添加块级作用域的目的

时间:2016-10-31 16:37:17      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:没有   erro   for循环问题   不同   问题   asc   ons   efi   循环   

 原本只有函数作用域和全局作用域两种,这就导致出现很多不方便的地方:

1)for循环问题:在看js高程的时候,纠结在第七章好久,就是一个这样的实例

function createFunctions(){
    var result = new Array();
    for (var i = 0 ; i < 10 ; i ++){
      result[i] = function (){
         return i;
      }  
    }
    return result;
}

  不管这段代码输出result[i]()中的i是几,结果都是10,这就是没有块级作用域的一个弊端。因为变量i是全局变量,每次循环都是对同一个i变量进行操作,导致覆盖,所以最后无论对result数组中的哪个函数进行执行,结果都是输出10;

2)内外成变量的覆盖问题

var a = 10;
function f(){
  console.log(a);
  var a = 20;
}

  执行结果是undefined,这是因为内层变量a对外层同名变量覆盖了,上述代码由于声明被提升,相当于下面这样写:

var a = 10;
function f(){
  var a;
  console.log(a);
  a = 20;
}

  由于内层函数作用域的存在,新声明的a是undefined,会被输出。


考虑到上述两种问题,加入了块级作用域,比如将for循环中的var i 改为let i,就会输出预期的结果;第二个例子中涉及到let和块级作用域绑定,存在暂时死区问题,若只将内层var换成let,会出现referenceError错误,即let声明不同于var,声明前不可获取,所以出错。若感兴趣,可再自行查阅。

es6中添加块级作用域的目的

标签:没有   erro   for循环问题   不同   问题   asc   ons   efi   循环   

原文地址:http://www.cnblogs.com/walei/p/6016160.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!