声明
JavaScript有三种声明。
- var 声明一个变量,可选择将其初始化为一个值。
- let 声明一个块作用域的局部变量(block scope local variable),可 选择将其初始化为一个值。
- const 声明一个只读的常量。
var与let都是用来声明一个变量,不同之处在于
1.在语句块中使用var声明的变量,成为语句块所在代码段的局部变量。而使用let只能在相应代码块访问
{
var temp = 'aa'
let temp2 ='aa'
}
console.log(temp) //可以访问temp变量
console.log(temp2) //temp2 is not defined
2.使用var声明的变量在 没声明前可以引用,而不会引发异常。
//使用var声明变量bb
console.log(bb) //undefined
var bb = 'bb'
//为什么使用var没有报错?
//console.log(bb) //undefined
//var bb = 'bb'
//因为使用var声明的变量会被提升到代码块顶部
//声明bb的写法 相当于下面这样
var cc
console.log(cc)//此时cc已经被声明所以不会报错
cc = 'cc'
//使用let声明
console.log(aa) //Uncaught ReferenceError: aa is not defined
let aa = 'aa'
常量
mdn常量介绍
这篇文章是这样介绍的————const 声明创建一个只读的常量。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。(译者注:JavaScript中的常量和Java,C++中的常量一个意思。注意区分常量的值和常量指向的值的不同)
const aa = '这是一个常量只能赋值一次'
console.log(aa)
//接下来赋值一次
aa = '能不能赋值啊???' //Assignment to constant variable. 看来是不能再次赋值了。
但这句“这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。”是什么意思?
var object = {
name:"this is my name"
}
const aa = object
//注意接下来的操作!!!
aa.name = '原来你是隔壁老王'
aa.age =20
console.log(aa) //Object {name: "原来你是隔壁老王", age: 20}
上面的操作没有对常量aa 进行第二次赋值,只是修改在堆内存中的对象,没有改变 常量aa的指针。所以不会报错。
所以js中的常量并不是值不能变,而是只能赋值一次