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调试说明
Jun 07 Javascript
js 程序执行与顺序实现详解
May 13 Javascript
特殊情况下如何获取span里面的值
May 20 Javascript
javascript移动设备Web开发中对touch事件的封装实例
Jun 05 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
Jul 23 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
Dec 08 Javascript
easyui Droppable组件实现放置特效
Aug 19 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
Dec 03 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
jQuery Validate让普通按钮触发表单验证的方法
Dec 15 Javascript
用jQuery实现可输入多选下拉组合框实例代码
Jan 18 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
Aug 22 Javascript
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
实用函数5
2007/11/08 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
MSN消息提示类
2006/09/05 Javascript
基于jquery的表格排序
2010/09/11 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
javascript格式化日期时间方法汇总
2015/06/19 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
处理Python中的URLError异常的方法
2015/04/30 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
python生成器用法实例详解
2019/11/22 Python
python实现程序重启和系统重启方式
2020/04/16 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
奥利奥广告词
2014/03/20 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
小学信息技术教学反思
2016/02/16 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
手残删除python之后的补救方法
2021/06/26 Python
Java实现多文件上传功能
2021/06/30 Java/Android
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技