const声明的变量不得改变值。为什么这样值变了却可以?

const scrollTop = document.documentElement.scrollTop
滚动条事件,拖滚动条打印scrollTop每次打印的值不一样!不是说值不能改变吗?为什么这样可以呢?

阅读 1k
评论
    3 个回答

    如果你只是定义在函数里面,因为函数是有作用域的,也就是当函数执行完后,该变量就自动销毁了,再次调用的时候则会再次定义该变量,所以该值变了不是因为修改,而是因为重新定义。
    当然,如果它是个对象的话,尽管是const定义也是可以改变里面的属性的

      我的理解是这样的
      document.documentElement.scrollTop 存在一个内存地址中。
      const 声明的变量指向这个地址,地址的值变了,但是 const 的指针没有变。

        这其实涉及到原始类型引用类型
        const定义的是常量,常量的值是不能被修改的

        原始类型

        以6种原始类型中的string为例

        const a = '1';
        a = '2'; // => 报错

        引用类型

        以3种引用类型中的object为例

        const a = {b: 1};
        a.b = 2; // => 通过
        a = 2; // => 报错

        原因

        • 对原始类型的操作,就是操作这个值的本身,常量中是不允许的
        • 对引用类型中某个属性的操作,实际上对这个值本身并没有影响
        • 以上面的例子来说,修改a.b,其实只是修改了b.而对a并没有影响
          撰写回答

          登录后参与交流、获取后续更新提醒

          相似问题
          推荐文章