var
var是ES5中的属性,可重复定义,ES5中是不存在块级作用域的。
js中有两种作用域,全局作用域和方法作用域
function getdate() {
var date= new Date()
return date
}
getdate();
console.log(date) //Reference Error date //在外面方法中访问不到
但是有个问题,只要在方法中定义的var,在该方法中都可以访问到。这就造成很多问题了。
let 和 const
在ES6中新增了let和const两个变量声名的属性,不可重复定义,可以实现块级作用域。
const和let的作用域一致都是块级作用域。不同的是const变量一旦被赋值,就不能再赋值了。但是变量的值依旧可以改变。
const person = {
name:"xiaowang"
}
person.name="laowang" //依旧可以修改
person = {
} //×,不能被重新赋值
let声名的变量是块级作用域,即在整个大括号{}中是个可以访问到的。
在{}外访问let定义的变量便会报错,提示未定义
大部分情况下使用const,在类似for循环需要改变时使用let,const用来声名常量,其他情况下一律使用let