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

    const不能从字面上来理解,他不能修改的是栈内存在的值和地址。

    使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。

    怎么理解栈内存在的值和地址呢?就要从javascript的类型说起:
    基本类型 Boolen, Number, String 是把直接值直接存在栈内
    引用类型 Object(Function, Array ....)是把值存在对应的地址中

    const b = 2;//正确
    
    // const b;//错误,必须初始化
    
    console.log('函数外const定义b:' + b);//有输出值 函数外const定义b:2
    
    // b = 5; //错误,Assignment to constant variable.

     const:

    1. 如果定义了一个基本数据类型,比如number,string 。。。 这样的话是常量,绝对不可改变。

    2. 如果用const去定义一个Object或者Array,只能说Object或者Array本身是常量,但是还是可以他们添加删除或修改属性或者元素的。。。

    let是块级作用域,函数内部使用let定义后,对函数外部无影响。

    var array = [1, 2, 3];
    var q = 1;
    
    array = array.map((v) => {
        return v + q;
    })
    
    console.log(array); //[2, 3, 4]
    var array = [1, 2, 3];
    let q = 1;
    
    array = array.map((v) => {
        return v + q;
    })
    
    console.log(array);
    //Uncaught SyntaxError: Identifier 'q' has already been declared
    if (xxx) {
       let a = 1;
    }
    
    console.log(a); // Uncaught ReferenceError: a is not defined
    
    if (yyy) {
        console.log(a); // Uncaught ReferenceError: a is not defined
    ]

    var 和 let 的区别在于作用区块。

    The let statement declares a block scope local variable, optionally initializing it to a value.[1]
    The variable statement declares a variable, optionally initializing it to a value.

    以上是 MDN 的定义,直白地说,var 的作用域是当前 scope 的所有子作用域,包括当前作用域中声明或调用的函数或是 while / for / if / try-catch 语法区块。

    SO~建议:

    为了让自己的代码可读性更好,赋值之后不会再做修改了就用const,如果后边还会修改就用let,不建议使用var

  • 相关阅读:
    PS初步学习经验心得记录
    css第四天--复合选择器和样式三大特性
    css第三天--盒子模型
    html第二天--表单控件和表格
    css第二天--字体属性和文本属性
    vue计算属性(computed)
    ant-input的使用
    js-split() 方法
    设计转到前端开发
    $set
  • 原文地址:https://www.cnblogs.com/wujiaqi/p/9045866.html
Copyright © 2011-2022 走看看