美文网首页
es6-声明变量

es6-声明变量

作者: heheheyuanqing | 来源:发表于2017-07-28 11:14 被阅读87次

    let命令

    • let只作用在所在的代码块内
    {
        var a = 1;
        let b  = 2; 
    }
    a;      //1
    b;      //进行报错
    

    通过let声明的变量b只作用在大括号内,在括号外调用变量b时则会进行报错;
      通过var声明的变量在全局中都有效

    • let不存在变量提升,变量的使用前需要先进行定义
    {
        console.log(foo);  //输出undefined
        var foo = 1;
    
        console.log(goo);  //抛出错误
        let goo = 2;
    }
    

    通过var声明的变量可以在声明前使用
      通过let声明的变量不能在声明前使用

    在编写代码的过程中尽量先声明再使用

    暂时性死区

    在let声明变量之前的代码称为变量goo的暂时性死区,结束的位置即let声明的代码区;
    其本质是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

    • 不允许重复声明
    {
        function foo(arg){
            var a = 1;
            let a  = 2;  //报错
            let arg = "hello world !";  //报错
            
            {
            let arg = "i 'am happy !";  //与arg不再统一作用域内,正确
            }
        }
    }
    

    只有在相同作用域内重复声明时会出现报错

    块级作用域

    在块级作用域中对函数声明相当于let语句,在作用域之外不能调用该函数;

    对于es6的浏览器,在块级作用域中声明的函数行为相当于var,会提升到全局作用域中
    如果需要在块级作用域中定义函数,则应使用函数表达式

    // 函数声明语句
    {
    
      function f() {
        let a = 1;
        return a;
      };
    }
    
    // 函数表达式
    {
      
      let f = function () {
         let a = 2;
        return a;
      };
    }
    

    do

    块级作用域是一个语句,没有返回值,在块级作用域前加上do将其转换为表达式

    {
      let t = f();
      t * t + 1;
    //大括号外无法得到t的值
    }
    
    let x = do {
      let t = f();
      t * t + 1;
    };  //x为大括号内获得的t值
    

    const命令——声明只读变量

    • 使用const声明的变量不能修改变量的值,并且不能只声明不赋值
    {
        const PI = 3.14;
        PI = 3;  //报错
        
        const h;  //报错
    }
    
    • 存在暂时性死区
    • 只在所在的作用域内有效
    • 不能重复声明

    本质:

    const定义的变量不可改动是指变量所指向的地址不可改动;简单类型的数据,值就保存在变量所指向的地址中;复合类型的数据,变量即一个指针,所指向的数据结构是可变化

    {
        const a = [];
        a.push('hello world !');  //正确
        
        const foo = {};
        foo.a = 2;
        foo = {"hello world ! "};  //改变了变量foo的指向关系,将会报错
    }
    

    可使用Object.freeze方法进行对对象的冻结

    {
        const foo = Object.freeze({});
        foo.a = 2;
        foo = {"hello world ! "};  //严格模式下报错
    }
    

    声明变量的方法

    • 六种:let、 const、 var、 function、 import、 class

    参考链接:http://es6.ruanyifeng.com/#docs/let

    相关文章

      网友评论

          本文标题:es6-声明变量

          本文链接:https://www.haomeiwen.com/subject/fxidhxtx.html