作用域:函数作用域
变量提升:重复声明,声明的变量会被提升
属性:如果将其声明在script标签子代里,可以通过window访问到
特性:如果声明在函数里,当函数调用结束后机会被销
<script>
function demo() {
var a = 1;
}
demo();
console.log(a);//报错
</script>
规范:如果不使用关键字声明,例如 a = 1,即使写在函数里也可以在函数外部使用,即成为全局变量,虽然合法但不推荐
问题:如果var声明在全局,会造成变量污染的问题
作用域:块级作用域
变量提升:不能重复声明并且不存在变量提升
特性:代码块外部不能被访问如下
<script>
function demo() {
if (true) {
let a = 1;
}
console.log(a); //undefined访问不到
}
demo();
</script>
规范:不能重复声明,否则报错
优点:解决了全局变量污染的问题,一般情况下建议使用let
作用域:块级作用域
变量提升:不能重复声明并且不存在变量提升
特性:代码块外部不能被访问,并且一旦声明就不能再改变
var:函数作用域变量会被提升,会造成变量污染;
let:块级作用域变量不会被提升;
const:块级作用域变量不会被提升并且声明后不能改变;