Javascript词法分析
词法分析的过程:
- 先分析参数
- 分析变量声明
- 分析函数声明
具体步骤:
- 在函数运行前的一瞬间,先生成Active Object活动对象;
- 函数声明的参数,形成AO的属性,值为undefined
- 接收参数(实参),形成AO相应属性的值
- 分析变量的声明,如 var age,
c-1. 如果AO还没有age属性,则添加AO的age属性,值是undefined
c-2. 如果AO已经有了age属性,则不作任何影响
5. 分析函数声明,如function foo(){},则吧函数付给AO.foo属性,如果此前foo属性已存在,则被无情的覆盖了。
举例:
function t(greet){
var greet = 'hello';
alert(greet); function greet(){} alert(greet);
} t(3);
解析:
一. 词法分析过程
- 生成AO={};
- 分析函数的参数greet, AO={greet:undefinde}
- 接收实参,AO = {greet:3}
- 有变量声明,但是由于AO已经有了greet属性,所以不受任何影响,AO = {greet : 3}(注意:声明仅仅是 var greet,而greet = ‘hello’是赋值,在执行阶段被执行。)
- 有函数声明,生成AO.greet = function(){};
二. 语句执行过程
- 执行greet = 'hello';
- Alert(greet);
- Alert(greet);
所以本题弹出两个hello.
思考题:
function a(b){
Var b;
alert(b);
function b(){
alert(b);
}
b();
} a(1);
解析:
一、词法分析过程
- 生成AO={}
- 分析参数b,AO={b:undefined}
- 接收实参,AO = {b:1}
- 分析变量声明,而由于AO已经有了greet属性,所以不做影响。AO = {b:1}
- 分析函数声明,AO= {b:function(){aler(b)}}
二、函数执行过程
- 执行alert(b);
- 执行b();也是alert(b);
这种所以本题应该alert两次function(){alert(b)}
Javascript词法分析的更多相关文章
- javascript --- 词法分析
JavaScript代码自上而下执行,但是在js代码执行前,会首先进行词法分析,所以事实上,js运行要分为词法分析和执行两个阶段. 词法分析主要分为三步: 第一步: 分析形参: 第二步: 分析变量声明 ...
- 浅谈JavaScript词法分析步骤
JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数声明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active Ob ...
- 前端开发 - JavaScript 词法分析
JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 1.分析函数的参数 2.分析函数的变量声明 3.分析函数的函数声明表达式 具体步骤如下: 函数在运行的瞬间,生成 ...
- JavaScript词法分析(尽力理解)
JavaScript中在调用函数的那一瞬间之前,会先进行词法分析 词法分析的过程: 当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面: 1:函数参数 ...
- JavaScript词法分析解析
函数在调用之前,会进行词法分析或者叫语法分析: 1. 函数在形成调用的那一瞬间,会有一个活动对象叫 active object ,简称AO,会分析如下几条: 形式参数 函数内局部变量声明 函数声明表达 ...
- 前端——JavaScript
何谓JavaScript?它与Java有什么关系? JavaScript与HTML.CSS组合使用应用于前端开发,JavaScript是一门独立的语言,浏览器内置了JS的解释器.它除了和Java名字长 ...
- JavaScript知识点总结[部分]
变量 局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量. <script type="text/javascript"> // 全局变量 n ...
- 前端基础-JavaScript的基本概述和语法
1.JavaScript概述 2.JavaScript引入方式 3.JavaScript语言规范 4.JavaScript语言基础 5.JavaScript数据类型 6.JavaScript运算符 7 ...
- 前端逼死强迫症系列之javascript续集
一.javascript函数 1.普通函数 function func(){ } 2.匿名函数 setInterval(function(){ console.log(123); },5000) 3. ...
随机推荐
- Go语言实现简单的一个静态WEB服务器
package main import ( "net/http" ) func main() { http.Handle("/", http.FileServe ...
- svd自我学习
svd(singular value decomposition) 奇异值分解 2015-05-17 16:28:50 图和部分内容来自:http://blog.csdn.net/wangzhiqi ...
- android之fragment
觉得写得好:http://blog.csdn.net/shulianghan/article/details/38064191
- mseed2sac的安装和使用
由于使用rdseed提取mseed文件到SAC文件会遇到一个问题就是: 同时需要dataless文件: 因此如果下载的数据中恰巧没有dataless文件,则需要用另外一种方式:mseed2sac 现在 ...
- mysql入门1
进入mysql数据库:进入mysql安装时的目录bin文件夹内
- 好久没写Blog了
上一年的经历: <炸年兽>搞了一阵后,美术去创业了.. 和另一个美术断断续续,做了个<斗战圣佛>,挺山寨的,都没敢跟别人说. 不管怎么说也算是自己上了一个appStore的游戏 ...
- ubuntu samba server 配置多用户访问
[share] path = /home/share/ writeable = yes browseable = yes create mask = directory mask = guest ok ...
- PKu 2195
//PKu 2195 回家 By Loli_con Enail : Loli_con@outlook.com /* 题目叙述 ========= 在一个网格图中,有n个人和n个房子.每一个单位时间,每 ...
- 用Python3实现表达式求值
一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...
- Mysql修改日期,时间不变的做法
UPDATE tra_bargainorder SET EndParkingTime = ADDTIME (CURDATE() + INTERVAL 0 HOUR,TIME(EndParkingTim ...