0%

JS变量提升

总结

学好编译原理。

动态类型语言与类型静态语言

JavaScriptJava 区别是啥?

老婆与老婆饼的区别。😬😬 说笑了~

动态类型语言给人的感觉好像是按行执行,执行到哪就干哪行的代码,静态类型语言先编译再执行。其实我觉得不全对,动态类型语言应该也有他对应的字节码。

变量提升

指的就是在 JS 里面用 var 关键字定义变量时会提升到最前面,这个过程在词法分析语法分析的时候已经做了,而不是在运行时

比如

1
2
3
4
5
6
7
console.log(age) // undefined
var age = 26

// 可以理解为
var age
console.log(age)
age = 26
1
2
3
4
5
6
7
8
9
10
11
12
if(!('a' in window)) {
var a = 1;
}
console.log(a); // undefined

// 可以理解为
var age
if(!('a' in window)) {
a = 1;
}
console.log(a); // undefined


暂时性死区

var 的不同的是 let/const 声明的变量不会在作用域中被提升。所以在声明前访问会报错,这点和其他语言效果一样

1
2
3
4
5
6
console.log(name) // undefined
var name = 'Matt'
// age 不会被提升
console.log(gender) // ReferenceError:gender 没有定义
console.log(age) // ReferenceError:age 没有定义
let age = 26