首页 > 代码库 > 认识javascript的引擎之--1
认识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
认识javascript的引擎之--1