var 和 let 都是申明变量的。
//var 申明变量
var a
a = 1
var a = true
console.log(a)
输出:true
// let 申明变量
let a
a = 1
let a = true
console.log(a)
输出就会报错:Identifier ‘a’ has already been declared ; 告诉你不能重复定义变量
var定义变量会覆盖之前定义过的变量,let定义过的变量不能重复声明
// var的块级作用域
var flag = true
if (flag){
console.log(a)
}
var a = 1
输出:1
// let的块级作用域
var flag = true
if (flag){
console.log(a)
}
let a = 1
输出:a is not define //a 未定义
// var的函数作用域
function test(){
var a = 'hello world'
console.log(a)
}
test()
console.log(a)
输出:helloworld
a: is not defined
var的变量提升
console.log(a)
var a = 'helloworld'
输出:helloworld
var定义的变量相当于定义在所有代码的第一句, var存在变量提升 ,let不存在 let的定义的语法更为严谨,建议使用let定义变量,让代码更为规范。
const 申明的变量一定赋予初始值,一旦赋予初始值就不能改变 相当于Java中的final吧
但是使用const 定义数组注意时:
const a = [1,2,3]
a[1] = 3
输出:a = [1,3,3]
a = 3
输出:Assignment to constant variable.
引用类型变量所指向的对象之所以可以修改, 是因为引用变量不是直接指向对象的数据, 而是指向对象的引用的. 对象的数据值可以被修改。就是常量的地址不变时,可以修改常量的内容。