js声明的一些杂点
var 与 let 声明的细点
1、在全局作用域下声明的区别
a = 10 // a是直接挂到window对象上的 没有变量提升
var a = 2 // a是直接挂到window对象上的(只有在全局作用域才会挂上window)
let a = 19 // 不会挂到window身上
2、使用var/function声明有变量提升 而let和const的没有的
3、使用var/function声明是可以重复声明的,后面的声明就直接忽略,相当于是一次赋值
而使用let和const是不允许重复声明的
let a = 2 console.log(a) // 代码一行都不会打印 在浏览器开辟栈内存自上而下执行代码之前 不仅有变量提升话会开启词语法检测 检测当前代码是否会出现语法错误(SyntaxError) 如出现错误 则一行都不执行 let a = 3 console.log(a)
4、var 和 let 一起声明的时候 也会发生重复声明报错 Uncaught SyntaxError: Identifier ‘a’ has already been declared(只要栈内存中存在这个变量,再使用const或var声明变量就会报错)
5、function的重复声明是后面的覆盖前面的声明,而var的声明是前面一声明就会忽略后面的声明
6、不管条件是否成立 变量提升不会缺席 但是function就只会提升声明 不会定义
console.log(a) // undefined if(! ("a" in window)){ var a = 1 } console.log(a)// undefined
7、let解决了暂时性死区问题
// console.log(a) // Uncaught ReferenceError: a is not defined console.log(typeof a) // 没用let 直接输出undefined 用了let 报错 Cannot access 'a' before initialization let a
8、var a = b =10 相当于 var a = 10; b = 10; var a = 10 , b = 10; 相当于 var a = 10; var b = 10;