何双江yarshray 2019-06-29
JavaScript ( JS ) 是一个单线程、解释型的编程语言。
JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。
自上而下,解释一行,执行一行;不会通篇编译为一个文件再执行。
顾名思义 就是检查一遍js代码内有没有出现语法错误(比如少些个分号,多写个括号等);语法分析期间不会执行代码
预编译发生在函数执行的前一刻
全局下:
全局的变量声明和函数声明则会存放在全局对象内(Global Object 简称GO,它是window的一部分,你可以直接把他理解成window对象)中
函数体内:
预编译会提前把函数里的变量声明和函数声明依据规则存放在该活动对象内(Activation Object,简称AO),
预编译简单理解就是在内存中开辟一些空间,存放一些变量与函数 。
预编译大致可分为4步:
所以如果遇到下面这种情况,当函数声明和变量声明名称相同时:
console.log(a); var a= 1; function a(){};
编译后的代码其实是:
var a; function a(){}; console.log(a); a= 1;
所以最后输出的是:
function a() {}
预编译两个小规则
预编译前奏
<script> var a=2; console.log(window.a);//2 </script>
预编译完毕之后,JavaScript 脚本开始执行,执行顺序按照从上到下的顺序执行。
JavaScript执行顺序
练习:
function a(a){ console.log(a); a= 2; console.log(b); var b= 3; console.log(a); } a(1); console.log(a);
你可以先试想一下结果,然后复制代码到控制台去验证你的答案是否正确。