简单形容一下预编译
这是我的第一篇内容,只是因为在看视频的时候发现了一个问题,利用这篇博客来记录一下,因为正在参加前端培训,自己的技术水平也是非常的垃圾,曾经在学习Android的时候就在CSDN上解决过很多问题,希望我的博客能对您有所帮助
这是一道非常简单的题目,主要的内容就是分析代码执行的顺序,判断输出内容:
a = 100
function demo(e){
function e(){}
arguments[0]=2;
console.log(e) // 2
if(a>10){
var b=123; //在if语句中不可以定义变量
function c(){ //语法bug 在if语句中不能定义函数
}
}
var c;
a=10
var a;
f=123;//全局变量
console.log(b) // //undefined
console.log(c) //undefined
console.log(a) // 10
}
var a;
demo(1)
console.log(a) //100
console.log(f) //123
这道题非常简单,如果掌握了预编译的话,那么代码判断执行会很好理解,
预编译其实就是当你写出一篇代码时,系统会在代码执行的前一刻自动扫描一遍你的代码,检查你是否出现了低级的语法错误,找到你所定义的全局变量以及函数;
这里先说一下变量提升:
函数声明整体提升:就是只要你定义了一个函数,不论你将函数写在哪里,系统总会将这个函数放置在最前面,所以你只要定义了这个函数,不论在那个位置都可以调用
变量 声明提升:如果你现在定义了一个变量 var a=123 (函数声明+赋值) 系统会将var a放置在最前面而a=123还依旧在原来的位置
在你所有的代码执行前,系统会创建一个GO对象来进行预编译:
所有被声明的全局变量核函数都属于GO的属性,所有没有被声明直接被赋值的对象也都属于全局变量,成为GO的属性
GO===window 可以说GO与window相同GO的属性就是window的属性
而在你的函数执行前系统也会创建一个AO的对象,来进行预编译找到你定义的变量以及函数,与GO一样只是一个是用来对全局进行编译,一个对函数进行编译
所以在这道题目里先判断GO:
GO{
a:100,
demo:function(){},
f:123
}
其次判断AO{
e:1,
b:undefined,
c:undefined,
a:10
}
根据这些就可以判断出该打印出哪些结果了。
不知道有没有哪些好的教程视频 大佬们能给我推荐一下