JavaScript运行过程中的“预编译阶段”和“执行阶段”


Posted in Javascript onDecember 16, 2015

 javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块为范围<script></script>,即每遇到一个代码块都会进行  预编译>执行),了解javascript引擎的执行机理,将有助于在写js代码过程中的思路总结

首先科普下javascript中的两种声明方式,var和function,前者声明的是变量,后者声明的是方法

在预编译中,javascript对这两种声明做出了两种处理方案

<script>
var a = "1";

//声明变量a
 function b(){

//声明方法b
  
alert();

}

var c = function(){ //声明变量c


alert();

}
</script>

以上代码块中,a、c为变量赋值,b为函数声明,当执行以上的代码时,首先会进入预编译阶段,对与变量赋值a、c会在内存中开辟一块内存空间并指向变量名,且赋值为undefined

对于函数声明,则同样会进行开辟内存空间,但赋值的对象会将声明的函数赋值给函数名

预编译阶段:(PS:不管代码中声明变量和声明函数的顺序如何,在预编译阶段会先声明变量,再声明函数)

<script>

var a = undefined;


var c = undefined;

 

var b = function(){



alert();


} </script>

 执行阶段:

<script>

a = "1";


c = function(){



alert();


}
</script>

整体执行步骤:

<script>

var a = undefined;


var c = undefined;





var b = function(){



alert();


}


a = "1";


c = function(){



alert();


}
</script>

题目:

<script>

var a = "1";


function b(){



alert(a);



var a = "2";


}


b();
</script>

ps:javascript的预编译

     一、先预定义变量,再预定义函数

二、变量的预编译只作声明,不作初始化,初始化在执行时

 

三、function语句定义的函数,不仅声明了函数名,而且函数体也进行了处理

四、匿名函数不会预编译

function f(){      // 声明函数f  
return 1; } alert(f());       // 返回1 
var f = function(){    // 定义匿名函数f  
return 2; } alert(f());       // 返回2

先预定义了变量f,然后同名函数f()覆盖了变量f,所以第一次输出1;变量的预编译

var f = function(){    // 定义匿名函数f  
return 1; } 
alert(f());       // 返回1 
function f(){      // 声明函数f  
return 2; } 
alert(f());      // 返回1

先预定义了变量f,然后同名函数f()覆盖了变量f.

Javascript 相关文章推荐
JavaScript/jQuery 表单美化插件小结
Feb 14 Javascript
JS中自定义定时器让它在某一时刻执行
Sep 02 Javascript
html+js实现简单的计算器代码(加减乘除)
Jul 12 Javascript
jquery PrintArea 实现票据的套打功能(代码)
Mar 17 Javascript
微信小程序删除处理详解
Aug 16 Javascript
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
小程序数据通信方法大全(推荐)
Apr 15 Javascript
微信小程序数据统计和错误统计的实现方法
Jun 26 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 Javascript
详解CocosCreator消息分发机制
Apr 16 Javascript
vue3种table表格选项个数的控制方法
Apr 14 Vue.js
Sublime Text 3常用插件及安装方法
Dec 16 #Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
Dec 16 #Javascript
基于JavaScript获取鼠标位置的各种方法
Dec 16 #Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 #Javascript
javascript数组克隆简单实现方法
Dec 16 #Javascript
Perl Substr()函数及函数的应用
Dec 16 #Javascript
javascript针对不确定函数的执行方法
Dec 16 #Javascript
You might like
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
解析php取整的几种方式
2013/06/25 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
详解Python中的多线程编程
2015/04/09 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
python判断设备是否联网的方法
2018/06/29 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
python远程连接MySQL数据库
2019/04/19 Python
Django model update的多种用法介绍
2020/03/28 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
小学班主任寄语大全
2014/04/04 职场文书
安全标语口号
2014/06/09 职场文书
被告代理词范文
2015/05/25 职场文书
地道战观后感300字
2015/06/04 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书