词法分析的过程:

  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. angular js 图片轮播

    搬运工: eg1: Build a Sweet AngularJS Photo Slider Pt 2 with ngTouch DEMO:http://paul-xiao.github.io/ang ...

  2. iOS程序启动过程

    First, the function creates the main application object (step 3 in the flowchart). If you specify ni ...

  3. java常用注释

    @see 加入超链接 @see 类名 @see 完整类名 @see 完整类名#方法名 @version 版本信息 @author 作者信息 @param 参数名 说明 @return 说明 @exce ...

  4. python 中的高级函数reduce()

    reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收 ...

  5. JQery判断checkbox是否被选三种方式

    方法一:if ($("#checkbox-id").get(0).checked) {    // do something} 方法二:if($('#checkbox-id').i ...

  6. 关于iOS导航控制器隐藏和显示会出现返回键失效,导航栏标题动画异常

    最近做的demo  bug出现了,我觉得这个bug出现得很经典所以贴出来给大家看看, bug演示就是:点击返回键失效出现如下gif图演示的内容 为啥会出现如此奇葩的bug,系统的返回键居然失效了,尴尬 ...

  7. Android深度探索--HAL与驱动开发----第一章读书笔记

    1. Android的系统架构有四层,它的发展目前来说 是比较成熟的,流行于目前的市场.其架构包括四层(linux内核.C/C++代码库.Android SDK API.应用程序). 2. 驱动是直接 ...

  8. Excel的python读写

    实际工作中可能需要整理一些文档,或者记录一些数据,这时候使用python来操作Excel可能会帮得上你. 读操作: # encoding : utf-8 #设置编码方式 import xlrd #导入 ...

  9. tab标签切换

    <script>$(document).ready(function(){ $(".drtitle li").click(function(m){ $(this).ad ...

  10. arch安装

    [archwiki-install]: (https://wiki.archlinux.org/index.php/Installation_guide) uefi+gpt Gummiboot #se ...