1.程序执行的前一刻会先将代码预编译一遍,如果有语法错误则直接终止程序运行
//预编译之通天编译 --> 在执行的前一刻,会把文件通天扫描一遍
/**
- //预编译 函数整体提升(即函数会放到程序最顶端) 变量提升 (即 var a = 123 ; 难么会将a变量提升,则值是undefined)
- 未先声明变量就赋值的归全局所有 即Windows ,在程序执行则会创建一个Go{ } 对象 = Window{ }
- 1.先创建一个AO对象
- 2.再将函数形参和变量存入AO对象中,初始为undefined
- 3.在将相应参数值从执行顺序往AO对象中传值,后覆盖前
- 4.最后在执行程序,然后在AO对象中找
*/
// console.log(b);//undefined
// var b = 234;
// function test(a){
// console.log(a)//fn
// console.log(b)//234
// var a = 123;
// console.log(a)//123
// function a(){}
// b = 123 ;
// console.log(b);//123
// }
// console.log(b);//234
// test(1);
// console.log(b);//123
2.函数作用域之精辟及函数原理的浅入深出
这里我就拿个上面那个列子稍微改动一下
console.log(b);//undefined
var b = 234 ;
function test(a){
console.log(a) //fna
function a(){
a = 123456 ;
function c(){c = 789;}
}
console.log(b) //fnb
var a = 123 ;
console.log(a) ; //123
b();
function b(){
console.log(b) ;//undefined
c = 666 ;
var b = 456 ;
console.log(b) ;//456
}
console.log(c) ;//666
c = 999 ;
b = 123 ;
console.log(b);//123
}
test(1);
console.log(c); //999
console.log(b); //234