函数提升的优先级比变量提升优先级更高,同名的函数和变量怎么提升呢?预编译里 先声明变量,再声明函数,这个不是和前面的 (函数提升的优先级比变量提升优先级更高)冲突了吗?
var d = function d(){
console.log(this)
console.log(d) // f d()
d = 8
console.log(d) // f d()
}
d()
打印结果都是 都是 函数 d()
是否冲突呢?具体的运行机制怎样的呢?
全局预编译
1.创建一个GO对象 Global Object
2.将var关键字声明的变量当作GO对象的属性,赋值为undefined,有重名的直接覆盖
3.将function关键字声明函数 当作GO对象的属性,值为函数体,重名直接覆盖
函数预编译
1.创建一个AO对象 Activation Object 执行期上下文对象
2.函数的形参,成为AO对象的属性,值为实参的值,若未传值,值为undefined
3.将var关键字声明的变量,成为AO对象的属性,值为undefined,遇到已经存在的,不做任何变化
4.将function声明的函数 成为AO对象的属性 值为函数体,重名直接覆盖
你代码中d=8并没有使用var关键字,所有不会有变量提升,所以两次打印都是d该函数