console.log(a)
var a = 1;
function a() {}
console.log(a)
//预编译
// 生成GO对象
// 将变量声明的变量名当做GO对象的属性名, 值为undefinded
// 将声明函数的函数名当做GO对象的属性名, 值为函数体
//GO{
// a: undefined
// function a()
// 此处输出
// 1
// }
//================================================================
//函数提升优先级高于变量提升
// function a(){} // 函数声明提升 a-> f a (){}
// var a; // 变量提升
// console.log(a) // 此时变量a只是声明没有赋值所以不会覆盖函数a --> 输出函数a f a (){}
// a=1; //变量赋值
// console.log(a) // 此时变量a赋值了 --> 输出变量a的值 1

预编译GO的执行顺序 和 那个函数提升在变量提升之前的结论 感觉是互相违背的
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- _念_ 2022-04-22 16:59关注
这个其实没毛病的,var go = {a:1} 这里的a并不是你function a() {}的a,他们并不是同一个东西,对象的属性你可以理解为一个字符串,是对象go的一个属性,而函数a是一个变量。
解决 无用评论 打赏 举报 编辑记录