内部原理
内部原理分成,编译,执行,查询,嵌套,异常,用var a=2;做例子
编译
- 分词,语法单元:“var”,“a”,“=”,“2”,;
- 解析,抽象语法树(AST) abstrat snatax tree。
- 语法生成,将AST换成可执行的代码的过程,转换成一组机器指令
简而言之,编译过程就是把程序分解成词法单元,将词法单元解析成AST,然后将AST转换成机器指令等待执行的过程
执行
- 执行阶段:引擎运行代码时首先查找当前作用域,看a变量是否在当前作用域下,如果是,则引擎直接使用这个变量,如果否,则引擎会继续查找这个变量
- 如果找到了这个变量,则会执行将2赋值给这个变量,否则这个引擎就会抛出异常
查询
- LHS查询(做查询)
比如var a=2,对a进行了LHS查询 - RHS查询(右查询)
fn()对fn进行了RHS查询
console.log(a),对console对象进行了RHS引用,并检查其是否有log()方法
conlsole.log(a)对a进行RHS引用,并把得到的值传给了console.log
嵌套
变量声明提升,当函数中的变量在当前作用域找不到时就会往外嵌套查找,最终会找到全局变量(倘若一直找不到该变量)
<script>
function fo(a) {
function foo() {
console.log(a + b);
}
foo();
}
var b = 1;
fo(2);//3
</script>