zoukankan      html  css  js  c++  java
  • ecma6块级作用域

    转载自:http://blog.sina.com.cn/s/blog_77f241790102vqyf.html

    在很多语言中都有块级作用域,但JS没有,它使用var 声明变量,以function来划分作用域,大括号{}却限定不了var的作用域。用var声明的变量具有变量提升(declaration hoisting)的效果

    ES6里增加了let,可以在{},if ,for里声明。用法同var ,但作用域限定在块级,let声明的变量不存在变量提升
    一、let命令
    示例1:{}块
     {
       let a =10;
       var b=1;
     }
    console.log(a) // ModuleEvaluationError: a is ont defined
    console.log(b) //1
    上面的代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用了这两个变量,结果let声明报错,var 声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。
     示例2:if
    function getVal(boo){
       if(boo){
           let val = 'red';
           return val
       }else{
         // 这里访问不到val
          return null;
       }
      // 这里也访问不到val
    }
     示例3:块级作用域for
    var a = [];
    for (var i = 0; i < 10; i++) {
      a[i] = function () {
        console.log(i);
      };
    }
    a[6](); //10
    // 上面的代码用var 最后输出是10
    var a = [];
    for (let i = 0; i < 10; i++) {
       a[i] = function () {
        console.log(i);
       };
    }
    a[6](); //6
    // 上面代码用let,声明的变量公在块级作用域内有效,最后输出6
     
    示例四:变量提升(先使用后声明)
    function func(){
      // val先使用后声明,不报错
      alert(val);
      var val;
    }
    变量val先使用后声明,输出undefined ,也不报错
    这也意味着typeof不再是一个百分之百的安全操作
    ES6规定,如果代码块中存有let,这个区块一开始就形成了封闭作用域。凡是在声明之前就使用,就会报错。
    即在代码块内,在let声明之前使用变量都是不可用的。语法上有个术语叫“暂时性死区”,简称TDZ。
    当然TDZ并没有出现在ES规范里,它只是用来形象的描述。
     
    let 注意事项
    1、不能重复声明
       // var 和 let重复声明
       var name = "linyufei";
       let name = "mvp";
       // 两个let重复声明
       let age = 24;
       let age = 30;
    执行时报语法错误 (注: 在firefox中调试,不存在报错现象)
    2、有了let后,匿名函数自执行就可以去掉了
    // 匿名函数写法
    (functoin(){
      var jQuery = function(){};
      window.$ = jQuery;
    })()
    // 块级作用或写法
    {
      let jQuery = function (){};
      window.$ = jQuery;
    }
     
    二、const命令
    const也用来声明变量,但是声明的是常量。一旦声明,常量的值就不能改变。
    const PI = 3.1415;
    PI = 4;
    // 提示PI is read-only;
  • 相关阅读:
    Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
    linux coreseek-4.1安装
    8个必备的PHP功能开发
    LINUX 下mysql导出数据、表结构
    PHP缩略图类
    PHP文件上传类
    PHP抓取页面的几种方式
    MySQL性能优化的最佳20+条经验
    zend studio9.0.3破解及汉化 windons版
    【转载】【面试经验】PHP中级面试题
  • 原文地址:https://www.cnblogs.com/shixiaomiao/p/4828527.html
Copyright © 2011-2022 走看看