块级作用域
一个{}
就能形成一个块级作用域,声明对象{}
不会形成块级作用域。
let
let声明变量.
1.只作用在当前作用域下。
2.不能重复被声明。
let a=1;
let a=2; //这样会报错
3.let不存在变量提升。
const
const声明一个只读的常量。
1.值不能被改变,一旦声明,就必须立马赋值。
const a; //会报错
2.不能重复被声明
3.没有变量提升
4.只能在当前作用域中使用
5.const声明的数据,保存的是一个内存地址,所以声明对象,只要对象的内存地址不变就行。
const foo = {};
// 为 foo 添加一个属性,可以成功
foo.prop = 123;
// 将 foo 指向另一个对象,就会报错
foo = {};
暂存死区
在es6中 ,只要使用let或者const声明变量,那么就会形成一个块级作用域。
在块级作用域中如果声明了一个与上一级作用域同名的变量 ,那么块级作用域中就不会往上查找变量了 ,并且let声明的变量不存在变量提升,所以如下会报错找不到num
let num=1;
{
console.log(num);
let num=2;
}
顶层对象
顶层对象在浏览器环境中指的是window。在js中,全局变量和顶层对象属性是等价的。也就是,声明一个全局变量,可以使用window访问到。这样全局变量和window中属性重名就会被覆盖。
var num=1;
console.log(window.num)//1
在es6中声明的变量,不能通过window来访问了。
let num=1;
console.log(window.num)//不是window的属性,输出undefined
网友评论