Javascript 词法分析
时间:2019-08-09
本文章向大家介绍Javascript 词法分析,主要包括Javascript 词法分析使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Javascript 词法分析
/* 词法分析 分析3样东西 第一步:先分析参数 第二步:再分析变量声明 第三部:分析函数声明 一个函数能适用的全局变量,就从上面的3步分析而来 具体步骤: 0:函数运行前的一瞬间,生成Aactive Object (活动对象),叫AO 1: 1.1 函数声明的参数,形成AO的属性,值全是undefined 1.2 接收实参,形成AO相应的属性的值 2:分析变量声明!如var age, 如果AO上还没有age属性,则添加A0属性,值是undefined 如果AO上已经有age属性,则不做任何影响 3:分析函数声明,如function foo(){}, 则把函数赋给AO.foo属性 注:如果此前foo属性已存在,则被无情的覆盖了 */ function t(age) { alert(age) } t(5) //5 t() //undefined /* 词法分析过程: AO {age:undefined} 运行过程: t(5) ->AO.age=5;alert(AO.age);//5 t() ->AO.age没有得到赋值,还是undefined */ function t2(age){ var age = 99; alert(age) } t2(); /* 分析过程 0:形成AO={} 1: 1.1 分析形参 AO = {age:undefined} 1.2 接收形参 AO = {age:5} 2:分析var age,发现AO已经有age属性,不做任何影响 执行过程 AO.age = 99; alert(age) */ function t3(greet){ var greet = 'hello'; alert(greet); function greet(){} alert(greet) } t3(null); //hello hello /* 词法分析过程: 0:AO = {} 1: 1.1 分析参数 AO = {greet:undefined} 1.2 分析参数 AO = {green:null} 2:分析green变量声明,A0已经有greet属性,因此不做任何影响 3:分析green函数声明,AO.greet = function(){},被覆盖成函数 执行过程: green = 'hello' alert(greet) alet(greet) */ function a(b){ alert(b); b = function(){ alert(b) } b(); } a(1); /* 词法分析过程 0:A0 = {} 1:分析形参 A0 = {b:undefined} -> {b:1} 2:分析var声明没有?没有 3:分析函数声明没有?没有 (注:b = function({}) ,是一个赋值过程,在执行期过程才有用) 执行过程: alert(b);//1 b = function(){ alert(b); } b();//function */ /* function t1(){} t2 = function(){} 这两种方式效果不同 t1是函数声明,虽然全局内也得到一个t1变量,值是function t2只是一个赋值的过程,值是谁?值是右侧表达式的返回结果,即函数 就是说function (){}在js看来,就和3*2,6/3一样,是个表达式,返回一个结果 因此,t1 t2两种方式在词法分析时,有着本质区别 前者,在词法分析阶段,就发挥作用 而后者,在运行阶段,才发挥作用 */
原文地址:https://www.cnblogs.com/yz-blog/p/11328064.html
- Intellij IDEA查看所有断点
- Spring Boot国际化支持
- 有记忆会推理的可微分神经计算机,DeepMind现在开源了代码
- Spring Boot整合Thymeleaf模板引擎
- Spring Boot实现热部署
- Java中的宏变量,宏替换详解。
- 类、变量、块、构造器、继承初始化顺序,终极解答。
- Spring Boot Debug调试
- Maven精选系列--classifier元素妙用
- PostgreSQL里面的一些命令小结
- Java中创建String的两道面试题及详解
- PostgreSQL主备环境搭建
- Tomcat集群session复制与Oracle的坑。。
- 用Keras+TensorFlow,实现ImageNet数据集日常对象的识别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Elasticsearch 内部数据结构深度解读
- 关于 Elasticsearch 段合并,这一篇说透了!
- 解了这十道C语言题,你敢说你精通C语言?
- 微服务中使用Maven BOM来管理你的服务版本
- 设计模式之代理模式(文末赠书)
- 使用Spring IoC容器:选BeanFactory还是ApplicationContext?
- Stream使用这么久,它是如何提高遍历集合效率?
- FastDFS 分布式文件系统入门
- 「翻译」 如何Bypass rbash
- 代码审计-.NET下的序列化与反序列化(BinaryFormatter)
- 深入探讨 JavaScript 逻辑赋值运算符
- Spring IoC依赖注入:Spring提供了哪些依赖注入模式和类型呢?
- 谈谈volatile
- 【V-REP自学笔记(八)】控制youBot抓取和移动物体
- Gson 简单使用姿势小结