javascript的预解析与运行机制
来源:互联网 发布:matlab生成小世界网络 编辑:程序博客网 时间:2024/05/29 17:02
java的编译器的将源码编译为机器码或字节码在执行,而JavaScript是直接解析代码并运行输出
而Chrome的v8引擎比较特殊,先将源码编译为字节码,再转为机器码,执行。
预解释阶段是将源码转换为字节码
预编译阶段主要做的操作是:
var,function声明的变量提升到所在的作用域前
例如:
var a,b;(function(){ alert(a); //undefined alert(b); //undefined var a=b=3; alert(a); //3 alert(b); //3})();alert(a); //undefinedalert(b); //3
函数内相当于
var a; alert(a); alert(b); b=3;a=b;alert(a);alert(b);
对于function声明函数与函数表达式在预编译阶段的不同:
函数声明是:
function name(){...}
函数表达式:
var name = function(){...}
在预编译阶段,函数声明会提前,而函数表达式不会提前
(function(){var x=foo();var foo= function(){return "foobar";}return x;})();
输出:类型错误
var foo=function(){}声明的函数在预编译阶段不提升
同名的函数声明,后一个会覆盖前一个
var m=1,j=k=0;function add(n){return n = n+1;}y=add(m);function add(n){return n=n+3;}z=add(m);
输出4,4
原因是函数声明提升,后一个add函数覆盖前一个函数。
函数声明与函数表达式同时定义的比较:
var AA = function(){
console.log(' 1 ');
}
AA(); // 输出1
function AA(){
console.log(' 2 ');
}
AA(); //输出1
function AA会先提升,var AA=function赋值后,变量AA变成了函数,同名函数,覆盖,所以输出的都是1.
预解析分阶段进行
<script>var a=3;function AA(){a=4;console.log(a);}</script><script>function AA(){a=5;console.log(a);}</script>
输出的是4,分块解析是按<script>分块解析,没解析到下一块的时候,下一块的变量和function声明的函数不能提升。解析到下一块的时候,上一块的作用域链还存在,下一块可以使用上一块同一作用域的变量。
<script type="text/javascript">var a=5;function bb(){a=6;console.log(a);}</script><script type="text/javascript">console.log(a);</script>
输出的是5
运行过程:
js运行的时候是javascript引擎执行的,js引擎根据ECMAscript标准解析javascript代码的
但是IE的js引擎不是按照标准来的,所以产生了兼容性问题。
js执行的时候是单线程的,原因是多线程会造成同步的问题,比如,多个线程同一时间操作DOM,那浏览器就不知道以哪一个为准。
单线程意味着,按顺序执行代码,但是这样容易造成堵塞。于是将任务分成两种形式,同步任务和异步任务。
所有的同步任务在主线程上执行,形成执行栈。
先将异步任务挂起,异步任务有了运行结果就在任务队列放置一个事件,等同步执行完,就读取任务队列。
使用异步的模式编程的由:回调函数,事件,promises对象。
例如:
console.log("1");
setTimeout(function(){
console.log("2");
},10);
console.log("3");
阅读全文
0 0
- javascript的预解析与运行机制
- PHP 底层的运行机制与原理解析
- PHP 底层的运行机制与原理解析
- PHP底层的运行机制与原理解析
- PHP 底层的运行机制与原理解析
- PHP 底层的运行机制与原理解析
- 理解JavaScript的编译过程与运行机制
- javascript的运行机制
- JavaScript的异步运行机制
- javaScript运行机制的理解
- JavaScript 运行机制与单线程
- javascript运行机制:并发模型 与Event Loop
- JavaScript单线程运行机制与并发模型
- javascript 运行机制
- Javascript - 运行机制
- JavaScript 运行机制
- javascript运行机制
- undo与redo的运行机制
- 天池大赛o2o优惠券第一名代码解读(4)
- 差异解惑-1
- php设计模式(二)简单工厂模式
- 推荐Android开发收藏的良心网站
- ubuntu 16.04 could not get lock
- javascript的预解析与运行机制
- 剑指offer题解C++【6】旋转数组的最小数字
- MySQL + PHP
- 51nod 1035 最长的循环节
- 初学51单片机--网上教程(51自学网)
- 21. Merge Two Sorted Lists(java)
- POP3、SMTP和IMAP之间的区别和联系
- CSS清除因为浮动布局导致父元素height值为0的三种方法
- 外卖系统(用户端App+商家端App+后端云服务器)二 [2016年文章误删恢复]