let、const、var的区别

157 阅读2分钟

下载 (3).png

let、const、var的区别

先看这张表

声明方式变量提升作用域初始值重复定义
var函数级不需要允许
let块级不需要不允许
const块级需要不允许
简单理解函数作用域:函数体的子嵌套函数可以访问父函数体的变量。这种关系是可以继承的,子嵌套函数可以访问父、爷函数体的变量。
我们一起来看几个案例,以便更好的理解var~~~~
// 难度1
var num = 10;
fn1();
function fn1() {
  console.log(num);  // underfind
  var num = 20;
  console.log(num);  // 20
}
console.log(num);    // 10
// 2 --难度加1
var num = 10;
fn1();
function fn1() {
  console.log(num);  // 10
  num = 20;
  console.log(num);  // 20
}
console.log(num);    // 20
// 3 --难度加2
var num = 123
function f1(num) {
    console.log(num) // 456
}
function f2() {
    var num = 456
    f1(num)
}
f2()
​
// 4 --
var num1 = 10;
var num2 = 20;
function fn(num1) {
  num1 = 100;
  num2 = 200;
  num3 = 300;
  console.log(num1);  // 100
  console.log(num2);  // 200
  console.log(num3);  // 300
  var num3;
}
fn();
console.log(num1);  // 10
console.log(num2);  // 200
console.log(num3);  // num3 is not defined
let、const、声明的变量,在for,if语句中,会形成块级作用域,块级作用域内的变量,不能被作用域外部使用
// 块级作用域
if(1){
    const str= "str"
    console.log(str) // str
}
console.log(str) // str is not defined
const num= 100
if(1){
    console.log(num) // Cannot access 'num' before initialization
    const num= 200  //  没有变量提升,且为块级作用域
}
let、const声明的变量不存在变量提升,在变量声明之前使用会报错~~~
const声明的是一个常量,声明同时必须初始化,否则报错~~~
const numnum= 300
console.log(num) // Missing initializer in const declaration
如果const声明的是基本数据类型的常量,初始化之后不能修改;如果是复杂数据类型,可以修改其成员变量
const num = 500num= 600  // Assignment to constant variable.
const arr = [0,1,2]
arr[0] = 8
console.log(arr) // [8,1,2]

\