zoukankan      html  css  js  c++  java
  • 认识javascript的引擎之--1

    前言:

    一:每一款浏览器里面都能执行js脚本,那是因为制造商在浏览器里面加入了js引擎。也就是说js引擎在浏览器里面占有一席之地。

        1.开始的时候js处于沉睡状态,直到运行页面遇到 <script> 这个标签的时候就被浏览器叫醒了:浏览器说,js引擎有个叫<script> 的叫你

        2.然后js引擎就出去招待客人 <script>。到这个时候js引擎就开始工作了。

    二:浅谈js引擎的工作

           1.预解析

          js引擎工作的时候回预先往自己的一个仓库里面存数据,然后在进行读代码的工作。

          js引擎会读取  var  function  参数...    在遇见这个声明的时候,js引擎就会把这些存储在自己的仓库里面。

          遇到所有的变量,在正式运行代码之前,都提前赋了一个值:未定义    a =  .....   //undefined   未定义

          所有的函数,在正式运行代码之前,都是整个函数块:fn1 = function fn1(){ alert(2); }

          遇到重名的:只留一个   

            1.变量和函数重名了,就只留下函数。  因为变量为未定义( undefine)函数有值,所以保留有值的。
            2.函数与函数,后出现的函数会覆盖前出现的函数。

         2.读代码(逐行读取从上到下)

          当预解析完毕就开始读取代码:读取代码的时候遇到变量的 表达式:= + - * / % ++ -- ! 参数……      表达式可以修改预解析的值!  就会到自己的仓库里面查看是否有这个变量,并修改其仓库里面的变量值。

    三点:面试题问答

     1 alert(a);                    // function a (){ alert(4); }
     2 var a = 1;
     3 alert(a);                    // 1
     4 function a (){ alert(2); }
     5 alert(a);                    // 1
     6 var a = 3;        
     7 alert(a);                    // 3
     8 function a (){ alert(4); }
     9 alert(a);                    // 3
    10 
    11 js引擎如何执行呢?
    12       1.预解析:解析 变量,function 参数等   放入自己的仓库存起来
    13           解析到第2行: a =...
    14           解析到第4行: a = function(){alert(2)}   这时候遇到同名的只保留一个,保留函数
    15           解析到第6行: 仓库里面依旧是   a = function(){alert(2)} 
    16           解析到第8行: 仓库里面  a = function(){alert(4)}    他会覆盖第5行的a 
    17           解析完毕:仓库里面剩下  a = function(){alert(4)}
    18     2.读取操作(读取的时候逐行读取)
    19         读取到第1行:先查看仓库里面有什么,仓库里面只剩下 function(){alert(4)}   输出: function(){alert(4)}
    20         读取到第2行:这是一行表达式,表达式会修改仓库里面的值  仓库里面 a = 1
    21         读取到第3行:输出  1
    22         读取到第4行: 只是一个函数的声明,不是表达式所以仓库里面还是 a = 1 
    23         读取到第5行:输出1
    24         读取到第6行:仓库里面 a=3
    25         读取到第7行:输出 3
    26         读取到第8行:只是一个函数的声明,不是表达式所以仓库里面还是 a = 3    
    27         读取到第9行:输出 3
  • 相关阅读:
    团体程序设计天梯赛 L2-011 玩转二叉树 (25分)
    团体程序设计天梯赛 L2-010 排座位 (25分)(并查集)
    团体程序设计天梯赛 L2-009 抢红包 (25分)
    团体程序设计天梯赛 L2-007 家庭房产 (25分)
    团体程序设计天梯赛 L2-014 列车调度 (25分)(最长上升子序列)
    团体程序设计天梯赛 L2-006 树的遍历 (25分)
    团体程序设计天梯赛 L2-008 最长对称子串 (25分)
    团体程序设计天梯赛 L2-005 集合相似度 (25分)
    uva11401(Triangle Counting)
    UVA
  • 原文地址:https://www.cnblogs.com/andyhxl/p/5987448.html
Copyright © 2011-2022 走看看