zoukankan      html  css  js  c++  java
  • var、let、const

    //let是块级作用域,函数内部使用let定义后,对函数外部无影响,例如:
     {
            let a = 1;
            var b = 2;
     }
     console.log(b)// 2    
     console.log(a)//ReferenceError: a is not defined
    let :{}可以构成作用域,称之为块级作用域
    var:只有函数才可以构成作用域
    ——————
    for (let i = 0; i < 3; i++) {
      let i = 'abc';
      console.log(i);
    }//for循环的一个特别之处,就是循环语句部分是一个父作用域,而循环体内部 是一个单独的子作用域,所以上面代码会输出三次'abc',因为函数内部的变量i和函数外部的变量i是分离的
    //const定义的变量不可以修改(这句话其实是十分不准确的,看了阮一峰老师的博客中ES6的文档,恍然大悟),而且必须初始化,例如:
    const a = 1;
    console.log(a)// 输出 1
    ——————————
    const a ;
    console.log(a)//SyntaxError: Missing initializer in const declaration
    ——————————
     const a =1 ;
     a = 2
     console.log(a)//TypeError: Assignment to constant variable.
    //为什么说const定义的变量不可以修改这句话不准确呢,上代码:
    const obj = {
    name :'aaa'
    }
    obj.name = 'bbbb'
    console.log(obj.name)//输出'bbbb'
    obj = {name:'ccc'}
    console.log(obj.name)//TypeError: Assignment to constant variable.
    //在对象中添加属性是在堆中给该对象添加数据,而没有改变obj中存放的指向该对象的地址,而对obj重新赋值的操作则改变了obj的指针指向。

    阮一峰老师的ES6文档中写到:

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

    
    
  • 相关阅读:
    Vue路由1
    vue中的若干需要注意的点
    vue-使用ref属性获取和操作dom元素
    Vue子父组件间的传值【非常重要的一个知识点】
    Vue组件切换-以登录注册为例【加动画效果】
    Vue中的组件
    Vue动画
    MINIUI grid学习笔记
    (转) 【oracle调优】优化全表扫---cache整张表或索引
    (转) Delete/Truncate删除,释放表空间、降低高水位线、resize释放磁盘空间相关优化
  • 原文地址:https://www.cnblogs.com/kaw19950302/p/7850601.html
Copyright © 2011-2022 走看看