1.程序执行的前一刻会先将代码预编译一遍,如果有语法错误则直接终止程序运行
//预编译之通天编译 --> 在执行的前一刻,会把文件通天扫描一遍
/**
//预编译 函数整体提升(即函数会放到程序最顶端) 变量提升 (即 var a = 123 ; 难么会将a变量提升,则值是undefined)未先声明变量就赋值的归全局所有 即Windows ,在程序执行则会创建一个Go{ } 对象 = Window{ }1.先创建一个AO对象2.再将函数形参和变量存入AO对象中,初始为undefined3.在将相应参数值从执行顺序往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);//undefinedvar b = 234 ;function test(a){console.log(a) //fnafunction a(){a = 123456 ;function c(){c = 789;}}console.log(b) //fnbvar a = 123 ;console.log(a) ; //123b();function b(){console.log(b) ;//undefinedc = 666 ;var b = 456 ;console.log(b) ;//456}console.log(c) ;//666c = 999 ;b = 123 ;console.log(b);//123}test(1);console.log(c); //999console.log(b); //234