词法分析的过程:

  1. 先分析参数
  2. 分析变量声明
  3. 分析函数声明

具体步骤:

  1. 在函数运行前的一瞬间,先生成Active Object活动对象;
  2. 函数声明的参数,形成AO的属性,值为undefined
  3. 接收参数(实参),形成AO相应属性的值
  4. 分析变量的声明,如 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);

解析:

一. 词法分析过程

  1. 生成AO={};

  2. 分析函数的参数greet, AO={greet:undefinde}
  3. 接收实参,AO = {greet:3}
  4. 有变量声明,但是由于AO已经有了greet属性,所以不受任何影响,AO = {greet : 3}(注意:声明仅仅是 var greet,而greet = ‘hello’是赋值,在执行阶段被执行。)
  5. 有函数声明,生成AO.greet = function(){};

二. 语句执行过程

  1. 执行greet = 'hello';

  2. Alert(greet);
  3. Alert(greet);

所以本题弹出两个hello.

思考题:

function a(b){
Var b;
alert(b);
function b(){
alert(b);
}
b();
} a(1);

解析:

一、词法分析过程

  1. 生成AO={}

  2. 分析参数b,AO={b:undefined}
  3. 接收实参,AO = {b:1}
  4. 分析变量声明,而由于AO已经有了greet属性,所以不做影响。AO = {b:1}
  5. 分析函数声明,AO= {b:function(){aler(b)}}

二、函数执行过程

  1. 执行alert(b);

  2. 执行b();也是alert(b);

这种所以本题应该alert两次function(){alert(b)}

Javascript词法分析的更多相关文章

  1. javascript --- 词法分析

    JavaScript代码自上而下执行,但是在js代码执行前,会首先进行词法分析,所以事实上,js运行要分为词法分析和执行两个阶段. 词法分析主要分为三步: 第一步: 分析形参: 第二步: 分析变量声明 ...

  2. 浅谈JavaScript词法分析步骤

    JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数声明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active Ob ...

  3. 前端开发 - JavaScript 词法分析

    JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 1.分析函数的参数 2.分析函数的变量声明 3.分析函数的函数声明表达式 具体步骤如下: 函数在运行的瞬间,生成 ...

  4. JavaScript词法分析(尽力理解)

    JavaScript中在调用函数的那一瞬间之前,会先进行词法分析 词法分析的过程: 当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面: 1:函数参数 ...

  5. JavaScript词法分析解析

    函数在调用之前,会进行词法分析或者叫语法分析: 1. 函数在形成调用的那一瞬间,会有一个活动对象叫 active object ,简称AO,会分析如下几条: 形式参数 函数内局部变量声明 函数声明表达 ...

  6. 前端——JavaScript

    何谓JavaScript?它与Java有什么关系? JavaScript与HTML.CSS组合使用应用于前端开发,JavaScript是一门独立的语言,浏览器内置了JS的解释器.它除了和Java名字长 ...

  7. JavaScript知识点总结[部分]

    变量 局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量. <script type="text/javascript"> // 全局变量 n ...

  8. 前端基础-JavaScript的基本概述和语法

    1.JavaScript概述 2.JavaScript引入方式 3.JavaScript语言规范 4.JavaScript语言基础 5.JavaScript数据类型 6.JavaScript运算符 7 ...

  9. 前端逼死强迫症系列之javascript续集

    一.javascript函数 1.普通函数 function func(){ } 2.匿名函数 setInterval(function(){ console.log(123); },5000) 3. ...

随机推荐

  1. Go语言实现简单的一个静态WEB服务器

    package main import ( "net/http" ) func main() { http.Handle("/", http.FileServe ...

  2. svd自我学习

    svd(singular value decomposition) 奇异值分解  2015-05-17 16:28:50 图和部分内容来自:http://blog.csdn.net/wangzhiqi ...

  3. android之fragment

    觉得写得好:http://blog.csdn.net/shulianghan/article/details/38064191

  4. mseed2sac的安装和使用

    由于使用rdseed提取mseed文件到SAC文件会遇到一个问题就是: 同时需要dataless文件: 因此如果下载的数据中恰巧没有dataless文件,则需要用另外一种方式:mseed2sac 现在 ...

  5. mysql入门1

    进入mysql数据库:进入mysql安装时的目录bin文件夹内

  6. 好久没写Blog了

    上一年的经历: <炸年兽>搞了一阵后,美术去创业了.. 和另一个美术断断续续,做了个<斗战圣佛>,挺山寨的,都没敢跟别人说. 不管怎么说也算是自己上了一个appStore的游戏 ...

  7. ubuntu samba server 配置多用户访问

    [share] path = /home/share/ writeable = yes browseable = yes create mask = directory mask = guest ok ...

  8. PKu 2195

    //PKu 2195 回家 By Loli_con Enail : Loli_con@outlook.com /* 题目叙述 ========= 在一个网格图中,有n个人和n个房子.每一个单位时间,每 ...

  9. 用Python3实现表达式求值

    一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...

  10. Mysql修改日期,时间不变的做法

    UPDATE tra_bargainorder SET EndParkingTime = ADDTIME (CURDATE() + INTERVAL 0 HOUR,TIME(EndParkingTim ...