JavaScript 执行的原理
- 函数声明整体提升 (提升到代码最前面)
- 一个变量被声明后,变量声明提升(提升到代码最前面)
- 同时声明变量和函数,那么函数会在变量声明的后面 (变量声明比函数声明先执行)
JavaScript 的全局预编译
console.log(变量);//undefined
var 变量 = 123;
function 函数(){
console.log(函数);
}
函数() //f{}
- 先创建window对象
window{
}
- 变量名提升 (在运行到console的前 就会先声明一个名为“变量”的变量 并且默认这个变量值为undefined)
window{
变量:undefined
}
- 找到函数名
window{
变量:undefined
函数:undefined
}
- 把整个函数赋值给函数名
window{
变量:undefined
函数:整个函数体
}
ps(已经被提升过的执行时就不看了)
JavaScript 的函数预编译
a(1); //1为实参
function a (a){ // 括号的a为形参
console.log(a);
function a(){}
var a = 123;
console.log(a)//123
}
(基本和全局预编译基本一致 就是在多了一步将实参赋值给形参)
- 先创建局部对象(局部为GO)
GO{
}
- 变量名提升 (在运行到console的前 就会先声明一个名为“变量”的变量 并且默认这个变量值为undefined)
GO{
a:undefined
}
- 将实参给形参
GO{
a:1
}
- 找到函数名
GO{
a:1
}
- 把整个函数赋值给函数名
GO{
a:整个函数体
}