2021-07-26

内部原理

内部原理分成,编译,执行,查询,嵌套,异常,用var a=2;做例子

编译

  1. 分词,语法单元:“var”,“a”,“=”,“2”,;
  2. 解析,抽象语法树(AST) abstrat snatax tree。
  3. 语法生成,将AST换成可执行的代码的过程,转换成一组机器指令
    简而言之,编译过程就是把程序分解成词法单元,将词法单元解析成AST,然后将AST转换成机器指令等待执行的过程

执行

  1. 执行阶段:引擎运行代码时首先查找当前作用域,看a变量是否在当前作用域下,如果是,则引擎直接使用这个变量,如果否,则引擎会继续查找这个变量
  2. 如果找到了这个变量,则会执行将2赋值给这个变量,否则这个引擎就会抛出异常

查询

  1. LHS查询(做查询)
    比如var a=2,对a进行了LHS查询
  2. 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>

异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值