执行上下文
当 JS 代码被解析时,会创建上下文。首先是创建 window 上下文,如果有函数,则当函数被调用时才产生上下文(没被调用的话就不会产生)。JS 通过栈来管理上下文,window 对象被存放在栈底。当函数被执行完成后,其上下文就会出栈,而 window 会一直在栈底。
var a = 1;
function a() {
b()
}
function b() {
}
a()
// 产生 3 个上下文, window, a, b(b 在 a 中被调用了)
if (!(b in window)) {
var b = 1;
}
console.log(b) // undefined, 因为 b 被提前, 所以 if 判断为 fasle
var c = 1
function c(c) {
console.log(c)
}
c(2) // 报错
// 实际的代码如下
var c
function c(c) {
console.log(c)
}
c = 1
c(2) // c不 是函数, 当然会报错啦