我也来谈javascript高级编程之:javascript函数编译过程
前言
题目有点大,其实也就是手痒。。。跟大家来扯一下javascript编译过程。
那么到底什么是“编译”呢
这个。。。本人文笔太差,我还是直接举例子吧。
相信玩过js童鞋应该都看过下面这样一个面试题:

var a=3;
function fn(){
alert(a);
function a(){
a=5;
}
a();
alert(a);
}
fn();
alert(a);

请问上面的题目执行结果如何呢?
各位童鞋答对了没。没答对?。。。没关系。别急。下面进一段js科普:
各位童鞋都听过js是一门解释型语言。什么不知道“解释型语言”是啥。。。
“解释型语言”,通俗点说就是指从上往读一行执行一行。什么还是不知道。。。出门左拐 百度百科。
不错,js确实是一门解释型语言。但是,他是“有编译的”解释执行。
什么叫“有编译”,其实就是在执行前是先对整个程序进行整理(其他语言则是通过编译将源代码整理出目标程序)。
下面我们来看一下js的编译过程到底是怎么样的呢;
就拿上面这个例子来说吧:
首先他声明了一个激活对象,用来存储window内变量
active={a:"",fn:""}
然后对函数变量进行赋值
active.fn=function(){
alert(a);
function a(){
a=5; }
a();
alert(a);
}
然后就开始执行js脚本程序
active.a=a=3;//赋值
active.fn();//执行函数】
执行到这里又发现一个函数,所以又在他的外层建立了一个“激活对象”。用来保存 fn 函数的变量
fnActive={a:3}//已存在变量直接引用了外层的active;
然后对函数变量进行赋值
fnActive.a=function{
a=5;
}
然后又开始执行js脚本程序
alert(a);//这时候a是啥啊。。。大家应该知道吧。相当于 alert(fnActive.a);
就这样一层一层进行挖掘。。。
a();运行到这一步以后fnActive.a=5了
后面 运行 alert(a); 这里相当于 alert(fnActive.a=5);相信答案已经很明确了
最后是。最外层那个 alert(a);了 那么值到底是哪一个呢 由于 fn()这个方法里面操作的其实不是active.a这个值 所以a的值一直没有改变
这里不明确给出答案。只是希望大家自己去试验
总结
第一次写,,,语言表达有不妥之处希望各位童鞋见谅。。。大家试试(为了防止大家哪来主义,答案就不给出了。 大家进来自己敲着试试):
我也来谈javascript高级编程之:javascript函数编译过程的更多相关文章
- linux编程之main()函数启动过程【转】
转自:http://blog.csdn.net/gary_ygl/article/details/8506007 1 最简单的程序 1)编辑helloworld程序,$vim helloworld. ...
- Javascript异步编程之setTimeout与setInterval详解分析(一)
Javascript异步编程之setTimeout与setInterval 在谈到异步编程时,本人最主要会从以下三个方面来总结异步编程(注意:特别解释:是总结,本人也是菜鸟,所以总结不好的,请各位大牛 ...
- 【转】Javascript异步编程之setTimeout与setInterval
Javascript异步编程之setTimeout与setInterval 转自:http://www.tuicool.com/articles/Ebueua 在谈到异步编程时,本人最主要会从以下三个 ...
- Python Flask高级编程之RESTFul API前后端分离精讲 (网盘免费分享)
Python Flask高级编程之RESTFul API前后端分离精讲 (免费分享) 点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/12eKrJK ...
- JavaScript模块化编程之AMD - requireJS基础使用
JavaScript模块化编程之AMD requireJS基础使用 标签(空格分隔): JavaScript 参考文章 AMD规范 AMD是"Asynchronous Module Defi ...
- Python Flask高级编程之从0到1开发《鱼书》精品项目 ☝☝☝
Python Flask高级编程之从0到1开发<鱼书>精品项目 ☝☝☝ 一 .安装环境我们使用 flask web框架,并用 sqlalchemy来做数据库映射,并使用 migrate做数 ...
- javascript 元编程之 method_missing
javascript 元编程之 method_missing 引言 要说元编程 ruby 中技巧太多了,今天来写的这个技术也来自于 ruby 中的灵感. method_missing 这个在 ruby ...
- Python Flask高级编程之从0到1开发《鱼书》精品项目 ✍✍✍
Python Flask高级编程之从0到1开发<鱼书>精品项目 一 .安装环境我们使用 flask web框架,并用 sqlalchemy来做数据库映射,并使用 migrate做数据迁移 ...
- Python Flask高级编程之从0到1开发《鱼书》精品项目
Python Flask高级编程之从0到1开发<鱼书>精品项目 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感 ...
随机推荐
- UML简单梳理类图
依赖 Dependency Class Car{} Class Person{ int a; static int b public void buy(Car c){ int c; .... } } ...
- strategy pattern
- AC自己主动机
AC自己主动机 AC自己主动机是KMP和Trie的结合,主要处理多模板串匹配问题.以下推荐一个博客,有助于学习AC自己主动机. NOTONLYSUCCESS 这里另一个Kuangbin开的比赛,大家 ...
- Datatable转换为Json 然后,Json数据导入 js 档
C#在里面Datatable转换为Json的5代码示例 /// <summary> /// Datatable转换为Json /// </summary> /// <pa ...
- Directx11学习笔记【三】 第一个D3D11程序
在先前的解决方案中新建一个新的Win32项目FirstD3D11Demo.在写代码之前,我们必须先添加dx11所需要的库.为了链接dx库,右键项目选择属性->vc++目录,在包含目录中添加你所安 ...
- 【C语言探索之旅】 第三课:你的第一个程序
内容简介 1.课程大纲 2.第一部分第三课:你的第一个程序 3.第一部分第四课预告:变量的世界 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个 ...
- Ini文件帮助类
.ini文件是什么 .ini 文件是Initialization File的缩写,就是初始化文件.在Windows系统中,其是配置文件所采用的存储格式(主要是system.ini,win.ini,sy ...
- W3C DOM 事件模型(简述)
1.事件模型 由于事件捕获与冒泡模型都有其长处和解释,DOM标准支持捕获型与冒泡型,能够说是它们两者的结合体.它能够在一个DOM元素上绑定多个事件处理器,而且在处理函数内部,thiskeyword仍然 ...
- 关于int全区变量读写的原子性
关于int全区变量读写的原子性 关于int变量的读写是否原子性网上有非常多讨论,貌似不同平台不同,这里自己做实如今arm9平台測试.这里要注意原子性并不是指一条汇编才原子,实际上即使一次赋值编 ...
- struts.xml在Action配置具体解释
在博客上我已经基本上解释struts.xml基本配置.配置过程最为基本的是action的动态配置. 一.Action的创建方法 1)实现Action接口 2)继承ActionSupport类,覆写当中 ...