JavaScript中函数作用域之精辟,函数原理的浅入深出,及程序执行预编译之通天编译???
版权声明:本文为CSDN博主「NanQiao1716」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/NanQiao1716/article/details/104629921
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
i.这里我直接在终端运行了,如图所示
ii.在Chrome 浏览器运行程序的示意图
这里我在给出评论区了给出了几个案例,欢迎在评论区留下你的答案哦,我不会告诉你不可以直接速知答案的哦
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/NanQiao1716/article/details/104629921
————————————————
版权声明:本文为CSDN博主「NanQiao1716」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/NanQiao1716/article/details/104629921