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 相关文章推荐
你需要知道的10个最佳javascript开发实践小结
Apr 15 Javascript
node.js中的fs.stat方法使用说明
Dec 16 Javascript
javascript查询字符串参数的方法
Jan 28 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
cookie的secure属性详解
Apr 08 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
Aug 24 Javascript
每天一篇javascript学习小结(Date对象)
Nov 13 Javascript
详解react-router4 异步加载路由两种方法
Sep 12 Javascript
Vue常用指令详解分析
Aug 19 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
Oct 18 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
May 09 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
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
Python更新所有已安装包的操作
2020/02/13 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
UNIX文件类型
2013/08/29 面试题
大专毕业生简历的自我评价
2013/10/20 职场文书
大学生职业生涯规划范文
2014/01/22 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
优秀党员先进材料
2014/12/18 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
安全生产培训心得体会
2016/01/18 职场文书