js的执行过程
解析语法
- 若语法错误直接报错
// 此为语法错误 将不会打印 hello
// 而是直接 打印 Uncaught SyntaxError: Unexpected identifier
console.log('hello')
vac b;
js的预编译
生成 GO(Global Object)
- 全局扫描将 var 和 function 放入GO中
- var定义的变量先设置为undefined
- 是function的则直接将function写入AO(这就是你即使function在最底部 而你调用在上面也是可以调用的)
//1. GO{
// a:undefined,
// c :function c(){}
// }
var a=123;
function c(){
}
//2. GO{
// a:123,
// c :function c(){}
// }
// 若 有变量和函数名字相同时
//1. GO{
// a:function c(){},
// }
var a=123;
function a(){}
//2. GO{
// a:123,
// }
// 调用function
a(); // hello
function a(){
console.log('hello')
}
// 若使用 const定义的function则预编译不会放入AO中
a(); // Cannot access 'a' before initialization
const a=function (){
console.log('hello');
}
// a(); // hello 若将上面的a()注释掉将下面的打开则可以正常使用打印
js的执行