一阅 1处
使用 var 的问题
1)声明的变量默认声明到全局(会污染全局作用域)
作用域分为:全局作用域、函数作用域
1 | var a = 1; |
let + {}
1 | { |
var + {}
1 | { |
2)用var声明的变量会提升 var function import 这3种都会导致变量提升,用let声明的变量会绑定到当前作用域 暂存死区
我们希望像如上这样可以报错,因为a还没有声明 所以可以如下:
1 | { |
var VS let
1 | // var |
1 | // let |
*****当line5注释掉之后,可以看到返回 2 外面 2 向上级作用域查找了
1 | // let |
当前这个都是es6语法 要把es6转化成es5需要转化器 babel, 就会把let转化为var 就会输出 2 外面 1
3)当var a = 1; var a = 2;时后面的变量会把前面的覆盖掉,如果引用了别人的代码 若变量名相同会把别人的代码覆盖,所以这里用let 可以保证命名不重
1 | let a = 1; |
小示例
1 | let fn = function a(){ |
4) var a = 1; a = 100; var声明的变量可以被更改 希望不被更改用const
1 | const obj = {}; |
什么时候用const let, 尽可能用const 如果整个值需要改变 则使用let
5) 自执行函数可以解决作用域问题
1 | for(var i = 0; i< 10; i++){ |
用let的方法解决
1 | for(let i = 0; i< 10; i++){ |