词汇解释
调用栈(ECStack):浏览器在计算机内存中分配一块内存,专门用来供代码执行(也就是提供代码执行的环境)
全局上下文 GEC(global exection context)
全局对象(GlobalObject)
堆内存(Heap)
js代码的执行顺序
console.log(name) //undefined
var name = 'wxf'
console.log(name) //wxf
foo(1028)
function foo(num) {
console.log(num) //1028
console.log(n) //undefined
var n = 10
console.log(n) //10
}
foo(1028)
预编译阶段创建调用栈,创建VO对象。
变量会直接创建但不会赋值(所以name = undefined)。
如果有函数会创建内存存储函数并保存函数的父级(scope)和函数的执行体也就是代码块,此时函数已经被创建并保存在全局对象中(所以在foo定义前调用也可以执行)。
执行阶段
变量会被赋值
函数执行时会创建一个属于自己的上下文,也就是{}包裹的代码块,开始预编译创建变量num、n然后执行对应代码。