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/
  • 相关阅读:
    PAT2019顶级7-2:美丽的序列(线段树+DP)
    ZOJ2112 Dynamic Rank(可持久化线段树套树状数组)
    CF1353E K-periodic Garland(动态规划)
    CF1353D Constructing the array(优先队列)
    HDU2069 Coin Change(基础DP)
    surf(树状数组+DP)
    双倍快乐(回文树)
    ZOJ3591 Nim(博弈论)
    HDU6601 Keep On EveryThing But Triangle(可持久化线段树)
    HDU6599 I Love Palindrome String(回文树)
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/11408429.html
Copyright © 2011-2022 走看看