过年回来已经渐渐进入状态:
- 早上7点起来运动
- 练习一章口语
- 下午做一天学习的总结,每日一篇。
var 与 let 定义变量的区别
- 用var 定义的变量都有预解析,在 “作用域形成” 的时候,代码执行之前。 带var 和 function 关键字的都会进行提升。 var 定义的变量只 定义、不赋值,预解析出来的值是 undefined function 定义的不仅声明还要定义。所以会输出值。
- let 和 var 一样也是定义变量的。 let 定义的变量不会进行预解析(不提前声明),所以在声明之前使用变量会报错。 不论在私有作用域还是全局作用域下,变量都不会提前声明。
- let 定义的变量或函数不能重复定义(var 也不建议重复定义,而且一个变量只能定义一种类型),
- 注意: let 定义的变量虽然不进行预解析,但是代码执行前也会先将定义的变量过滤一边,一旦发现不合法直接报错,代码也不执行了。如下,
console.log(aaa) ---这里会引起 第2个纪录中的bug: aaa is not defined
let aaa=111;
let aaa=222; --- 这里会引起 第3个纪录中的bug: aaa has already been declared 即 aaa重复定义
但在浏览器中显示的是 下面的bug,原因就是第4个纪录说明的 先过滤 发现bug 不执行。