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 相关文章推荐
asp.net和asp下ACCESS的参数化查询
Jun 11 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
Jun 19 Javascript
BootStrap selectpicker
Jun 20 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
WEB开发之注册页面验证码倒计时代码的实现
Dec 15 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
让div运动起来 js实现缓动效果
Jul 06 Javascript
详解Vue微信公众号开发踩坑全记录
Aug 21 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
node事件循环和process模块实例分析
Feb 14 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
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
jQuery 查找元素操作实例小结
2019/10/02 jQuery
跟老齐学Python之一个免费的实验室
2014/09/14 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
Django数据库表反向生成实例解析
2018/02/06 Python
python字典快速保存于读取的方法
2018/03/23 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
如何查找和删除数据库中的重复数据
2014/11/05 面试题
保安员岗位职责
2013/11/17 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
实习生自我评价
2014/01/18 职场文书
高一化学教学反思
2014/02/05 职场文书
初中教师业务学习材料
2014/05/12 职场文书
合作协议书模板2014
2014/09/26 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
Vue的生命周期一起来看看
2022/02/24 Vue.js
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技