语法分析
预编译
解释执行
函数声明整体提升
变量声明变量名提升
var a = b = 123 //在局部作用域中声明
此时b为全局变量
创建AO对象
找形参和变量声明,将形参名和变量作为AO属性名,值为undefined
将实参值和形参统一
在函数体里面找函数声明,值赋予函数体
function fn(a) {
console.log(a)
var a = 123
console.log(a)
function a() {}
console.log(a)
var b = function() {}
console.log(b)
function d() {}
}
fn(1)
AO {}
AO {
a: undefined,
b: undefined
}
AO {
a: 1,
b: undefined
}
AO {
a: function a() {},
b: undefined,
d: function d() {},
}
预编译发生在函数执行前一刻
打印输出:
function a() {}
123
123
function () {}
Go (Global Object) 就是window,同时GO的预编译和AO一样
原文:https://www.cnblogs.com/lonelyman/p/15076679.html