zoukankan      html  css  js  c++  java
  • let 和 const 关键字

    看了阮老师的ES6入门再加上自己的一些理解整理出的学习笔记

    let关键字

    • 跟var相比,不会提升为全局变量,始终是块级作用域{}
    • 注意点:
      • 1: 不能在同一个块级作用域内声明同名变量
      • 2: (如果当前块级作用域内{}内部没有该变量的声明)向上级作用域查找,如果有声明,就只在本块级作用域中查找 let num = 1;if(true){console.log(num) //1}  
      • 3: 各个块级作用域内声明的变量是独立使用的,在更小的作用域内可以使用更大作用域的变量 let num =1 ; if(true){ let num = 2;//2 } //1 

    const关键字

    • const声明一个只读的常量,一旦声明,常量的值就不能改变。
    • 也是块级作用域,不存在变量类型提升
      • const不仅不允许不声明直接使用,而且必须一次性完成初始化(声明+赋值)
      • 同一个块级作用域内不允许声明同名的常量
      • 不允许被二次赋值,而可以被挂载属性

    引用阮老师写在《ECMAScript 6 入门》中的一段话:

    const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

    复制代码
    const foo = {};
    
    // 为 foo 添加一个属性,可以成功
    foo.prop = 123;
    foo.prop // 123
    
    // 将 foo 指向另一个对象,就会报错
    foo = {}; // TypeError: "foo" is read-only
    复制代码

    上面代码中,常量foo储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把foo指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。

    小总结:

    • 不管是let还是const ,都是块级作用域,都必须至少是先声明,才能使用(严格模式)
    • let 可以先声明,后赋值,const必须一次完成
    • 两者都不允许在同一个块级作用域内声明同名

    最后附上书籍地址:http://es6.ruanyifeng.com/

    感谢观看!

    原文:http://www.cnblogs.com/bfc0517/archive/2017/04/12/6697689.html

  • 相关阅读:
    常用正则
    存储过程里循环读取Array
    倒倒系列1
    利用HttpHandler生成静态页面
    古代人用拼音吗?
    确认Email无法复制粘贴
    C#调用OpenCV(一) 配置VS+OpenCV+Emgu cv
    ArcGIS Desktop9.3 (需要双击注册文件的破解包)在64位操作系统上的安装方法
    WebLogic console页面,localhost能登陆,IP不能登录
    javascript prototype学习(一)prototype的用处
  • 原文地址:https://www.cnblogs.com/yanglang/p/6698339.html
Copyright © 2011-2022 走看看