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. ...
随机推荐
- asp.net 5 中应用程序根目录及物理文件根目录的获取方式 此文已过期,不再适应rc1以后的版本
之前看了asp.net5,小弟就试着用了用,做了个小网站练习一下,有一个小模块需要上传图片到wwwroot下的images文件夹,但是aspnet5 发生了翻天复地变化,之前获取网站根目录的的方法不再 ...
- AWS-CDH5.5安装-软件下载
1.下载安装介质 下载CM安装文件: [root@ip---- cm5.5.0]# wget -c -r -nd -np -k -L -A rpm http://archive-primary.clo ...
- Volley之 JsonRequest 解析JSON 数据
ReqestQueue 和 JsonRequest String jsonUrl = "http://ip.taobao.com/service/getIpInfo.php?ip=63.22 ...
- wpf初步-grid布局-连连看棋盘
private void Window_Loaded_1(object sender, RoutedEventArgs e) { //Button btn1 = new Button(); //btn ...
- 张小龙微信小程序演讲内容简介
1月9号,看看实际上如何
- 【转】关于Oracle将小于1的数字to_char后丢掉0的解决办法
SQL代码如下: select rtrim(to_char(0.11, 'fm9990.99'), '.') from dual; 其中0.11为需要to_char的数字fm去掉字符串前面的空格999 ...
- a标签
a链接是一种触发行为元素,行内元素 属性:href/target/class/id/title href: <a href="www.baidu.com"></a ...
- 获取 view所在的VC
- (UIViewController*)viewController { for (UIView* next = [self superview]; next; next = next.superv ...
- asp.net C#获取程序文件相关信息
代码如下 复制代码 using System.Reflection;using System.Runtime.CompilerServices; //// 有关程序集的常规信息是通过下列// 属性集控 ...
- Duilib开发环境搭建
1.到github上下载最新版本,https://github.com/duilib/duilib,也没有发现版本号,就如图所示吧 2.我只安装了VS2008,而github上的已经更新到VS2013 ...