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

posted @ 2018-05-16 14:31  佳琪欧尼  阅读(151)  评论(0编辑  收藏  举报