1. var声明变量会挂载window上,二let和const声明的变量不会
var a = 1;
console.log(window)
const a = 1 ;
console.log(window.a)
let a = 1 ;
console.log(window.a)
2. var声明变量存在变量提升,let和const不存在变量提升
console.log(a)
var a = 1 ;
console.log(b)
let b = 1 ;
console.log(c)
const c = 1 ;
3. let 和 const 声明形成块作用域
if(1){
var a = 1;
}
console.log(a)
if(1){
let a = 1;
}
console.log(a)
4.同一作用域下let和 const 不能声明同名的变量 var可以
if(1){
const a = 1;
}
console.log(a)
var a = 1 ;
var a = 2 ;
console.log(a)
let a = 1 ;
let a =2 ;
console.log(a)
const a = 1 ;
const a = 2 ;
console.log(a )
5.暂时性死区
var a = 1;
{
a = 2 ;
console.log(a)
}
let a = 1;
{
console.log(a)
let a = 2;
//在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a,
//而这时,还未到声明时候,所以控制台Error:a is not defined
}
6.const属于常量 “常量”的广义概念是:‘不变化的量’,对于‘常量’的通俗比喻——“如同大山不被轻而易举地改变”!
const 如何做到变量在声明初始化之后不允许改变的?其实 const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。此时,你可能已经想到,简单类型和复合类型保存值的方式是不同的。是的,对于简单类型(数值 number、字符串 string 、布尔值 boolean),值就保存在变量指向的那个内存地址,因此 const 声明的简单类型变量等同于常量。而复杂类型(对象 object,数组 array,函数 function),变量指向的内存地址其实是保存了一个指向实际数据的指针,所以 const 只能保证指针是固定的,至于指针指向的数据结构变不变就无法控制了,所以使用 const 声明复杂类型对象时要慎重。
const arr = [1,20,55,5,8,12]
arr.push(58)
console.log(arr)
/* const用法
1,一旦声明必须赋值,不能使用null占位
2,声明后不可以修改
3,如果声明的是复合类型数据,可以修改其属性*/
今日总结!不喜欢或者是写的有问题请轻喷!如有大神看出问题,请评论区留言谢谢!!!!!!