提升: 虽然变量还没有被声明,但是我们却可以使用这个未被声明的变量,这种情况就叫做提升,并且提升的是声明。 注意:其实不仅变量会提升函数也会被提升。
let的特点:
- let声明不是全局变量,具有块级函数作用域,不会发生变量提升
- let声明的变量不能通过window.变量名进行访问 ,访问会出现:undefined
- 形如for(let x…)的循环是每次迭代都为x创建新的绑定
const的特点:
const指针指向的地址不可以改变,指向地址的内容是可以改变的。因为const只是保证对象的指针不改变,而对象的内容改变不会影响到指针的改变,所以对象的属性内容是可以修改的。
const PI = {};
PI.a = 3.15; //修改成功
const NS = 1;
Ns =2 ; //修改不成功
var :重复声明、不能限制修改,函数级;
关于提升
变量不会提升,但是函数会提升,一个例子:foo会报错
test();
function test() {
foo();
bar();
var foo = function() {
console.log("this won't run!");
};
function bar() {
console.log('this will run!');
}
}