1.var 变量提升
使用var声明的变量,声明会被提升到作用域的顶部
举几个例子:
eg1:
console.log(a) // undefined var a = 1
可以看做这样
var a console.log(a) a=1
eg2:
var a = 10 var a console.log(a) // 10
可以看作
var a; var a; a=10; console.log(a)
eg3,函数声明也会提升,函数提升会把整个函数挪到作用域顶部:
console.log(a) // ƒ a() {} var a = 1 function a() {}
看作:
var a; function a() {} console.log(a) // ƒ a() {} a = 1
2.var,let,const对比
1.在全局作用域下,var声明的变量,会挂载到window上,其他二者不会
2.三者都存在提升,但是let,const的提升和var不同:虽然变量在编译的环节中就被告知在这块作用域中可以访问,但是访问是受限制的(形成暂时性死区):
所以let const必须先声明后使用
var a = 1; function test1(){ console.log(a); } function test2(){ console.log(a); let a; // 执行到上一步时就已经知道该作用域内有a,所以不会再往外层作用域找,但是形成了暂时性死区,这里的a无法访问 } test1() // 1 test2() // error, a is undefined
3.let
和 const
作用基本一致,但是后者声明的变量不能再次赋值
3.模块化
3.1为什么要模块化?
3.2实现模块化的方法有哪些?各有什么特点?