var:声明变量,且具有变量提升
补充:
变量提升:原理:JS引擎的工作方式是①先解析代码,获取所有被声明的变量;②然后在运行。也就是专业来说是分为预处理和执行两个阶段。


var:声明的变量可以挂载到全局属性中,但是let和const都不可以
var a = 0;
console.log(window.a) // 0
let b = 1;
console.log(window.b) // undefined
const c =2;
console.log(window.c) // undefined
var:可以多次声明同一个变量,最后声明的变量的值会覆盖前面声明的变量值,但是let和const不可以重复声明同一个变量
var a = 0;
var a = 10
console.log(a) // 10
let b = 1;
let b = 11
console.log(b) // Uncaught SyntaxError: Identifier 'b' has already been declared
const c =2;
const c =22;
console.log(c) // Uncaught SyntaxError: Identifier 'c' has already been declared
let:是 ES6 新特性,其作用也是声明变量,但有别于var和const受块级作用域的影响,直白的讲就是在块级作用域中是可获取的,一旦超出块级作用域范围将获取不到


const与let一样,同样受块级作用域的影响


const:声明的变量,一旦声明变量必须要将其赋值,不然会报错提示一下信息:
const c
console.log(c) // Uncaught SyntaxError: Missing initializer in const declaration
const:区别于var、let,const声明的是常量,而且一旦被赋值,就不能再更改


既然const声明的常量一旦被赋值,就不能再修改了,那还有其他情况的发生吗??当然有,废话不多说,直接上代码。。。


看到上面这个代码是不是“咦~~小朋友,你是不是有很多问号??”,哈哈哈皮一下,带着问号继续追究个为什么?
这就跟所谓的堆栈有关系了,const只是修饰栈空间的地址不可更改,但是并没有修饰堆空间的值不可修改。
2599

被折叠的 条评论
为什么被折叠?



