ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。
变量提升
ES5中变量声明的方式
var
var声明的变量的作用域是函数作用域。
function
函数声明要优于变量声明
特点:
- 允许重复声明。
- 存在声明提升,自动提升到所在作用域的顶端。但是变量赋值不会提升。
- 没有块级作用域。
-
var
和function
声明的全局变量与顶层对象的属性是等价的。
//1. 允许重复声明。
var a = 2;
var a = 3;
console.log(a); //3
function foo() {
console.log("1");
}
function foo() {
console.log("2");
}
foo(); //2
// 2.存在声明提升
console.log(b); //undefined
var b = 2;
//4. 顶层对象的属性与全局变量是等价。
var c =3;
console.log(window.c); //3
ES6中变量声明的方式
let
const
1.给const修饰的标识符被赋值之后, 不能修改
2.声明变量的时候必须初始化。
3.常量的含义是指向的对象不能修改, 但是可以改变对象内部的属性。
const obj = {
name: 'black',
};
console.log(obj);
//{ name: 'black' }
obj.name = 'red';
console.log(obj);
// { name: 'red' }
class
特点:
- 不允许重复声明
- 不存在声明提升
- 存在块级作用域
-
let
、const
、class
声明的全局变量,不属于顶层对象的属性
隐式声明
作为全局变量存在(即便它在函数内定义)但不会声明提前。
var a = 3;
function foo() {
console.log(a); //3
a = 5;
}
console.log(a); //3
foo();
console.log(a); //5
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。