作用域与let、const
let命令
1、let命令只在所在的代码块有效
2、存在暂时性死区
3、let命令不允许重复申明
4、let为JavaScript新增了块级作用域.
var命令
变量提升: var声明的变量无论其实际声明位置在何处,都会被是为声明于所在函数(或全局)的顶部。
作用域
变量或函数在起作用的区域。
全局作用域:
1、 在所有函数之外定义的变量拥有全局作用域,该变量为全局 变量。
2、全局变量可以在当前页面中任何JavaScript代码中访问。
函数作用域:
1、在函数中声明的变量(包括函数参数)指定在其所声明的函数内被访问。
块作用域 :
1、由{ }界定的代码区域,let声明的变量具备可访问块作用域。
2、ES6允许块级作用域任意嵌套,一对{}即为一个块级作用域。
3、内层作用域可以定义与外层作用域同名变量。
4、块级作用域的出现使得ES5中惯用的IIFE(立即执行匿名函数)不再必要了。
const命令
基本用法
声明一个只读的常量,一旦声明,其值不能改变且必须立即初始化。
除此之外,与let用法一致。
实质
const foo={
y:10};
foo.x=100;
console.log(foo.x);
foo={
n:1000};
当常量保存的不是一个值,而是一个地址的时候,该常量所引用的对象是可以更改成员的,只是不能更改该常量保存的地址。
顶层对象
1、浏览器的顶层对象为window,Node的为global。
2、var定义的变量会关联到顶层对象中,let和const不会。
var a=100;//undedined
console.log(window.a);//100
let b=100;//undedined
console.log(window.b);//undefined
总结
let和const命令所声明的全局变量不属于顶层对象属性
var和function命令声明的全局变量是顶层对象的属性。