zoukankan      html  css  js  c++  java
  • es6中添加块级作用域的目的

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

    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,声明前不可获取,所以出错。若感兴趣,可再自行查阅。

  • 相关阅读:
    SQL字符串处理函数大全
    如何在word2007中并排查看对比显示两个文档
    android系统体系结构
    实现html转Xml
    一款很不错的html转xml工具-Html Agility Pack
    HtmlAgilityPack 之 HtmlNode类
    微信公众平台开发入门教程
    Apache Kafka:下一代分布式消息系统
    JAVA线程池的分析和使用
    ZooKeeper系列之八:ZooKeeper的简单操作
  • 原文地址:https://www.cnblogs.com/walei/p/6016160.html
Copyright © 2011-2022 走看看