zoukankan      html  css  js  c++  java
  • Es6 之 const关键字

    https://blog.csdn.net/jin_doudouer/article/details/80493649

    es6中新增了一个const。就是用来定义一个常量的。以前其实一直没有把这个放在 心上,觉得就是定义一个常量的,很easy,没有什么可以深入的。

    问题来了:

    let obj = {'num1' : 20, 'num2' : 30}
    const obj1 = obj
    const num = obj.num1
    obj.num1 = 40
    那么,试问这时候如果输出obj1 和 num的值,分别是多少呢?让我们在谷歌浏览器中试验一下

    console.log(obj1,num)
    {num1: 40, num2: 30} 20

    答案很显而易见了。在obj的num1属性值改变了以后,obj1的值是随着对象的改变而改变了,但是num的值却并没有改变。也就是说:

    const定义的对象,当对象改变了之后,const定义的值也会跟着改变。

    cosnt定义的变量是一个对象的一个属性值,但是当对象属性值改变了以后,const定义的这个值并不会改变。

    那么这是为了什么呢?

    在计算机中,常量是放在栈中的,而对象是放在堆中的。对于对象赋值,const指向的仅仅是他的地址,cosnt仅仅是保证这个地址不改变,至于地址对应的数据,是可以进行改变的。举个栗子,现在可能在外工作很多人都是租的房子,假如你住在a公寓的a单元101,cosnt就仅仅是保证他指向的是这个地址,至于你房子里住的是哪些人,他是不关心的。~

    而如果定义一个简单的数据类型,那这个数据他本身就是存在栈中的,所以不可以改变。
    ————————————————

    原文链接:https://blog.csdn.net/jin_doudouer/article/details/80493649

    --------------------分割线--------------------

    另外一个常见问题就是let 和var 循环

    for (var i = 0; i < 10; i++) {
      setTimeout(function(){
        console.log(i);
      })
    }
    // 输出十个 10
    for (let j = 0; j < 10; j++) {
      setTimeout(function(){
        console.log(j);
      })
    }
    // 输出 0123456789
    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    array_keys
    strval
    is_numeric
    php static延迟静态绑定
    page39 类的访问权限控制
    page34类的继承
    被遗忘在角落的类型检查函数
    2.2.5重写静态变量
    2.2.3使用parent作用域
    16个最棒的WordPress博客写作发布工具【博主桌面工具】
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/11408429.html
Copyright © 2011-2022 走看看