javaScript词法分析
来源:互联网 发布:linux open 返回值 编辑:程序博客网 时间:2024/05/20 10:55
1.概念:
var str1 = 'global';function t1(){ console.log(str1);//global console.log(str2);//undefinde var str2 = 'local';}t1(); 注:js 代码自上而下执行:js代码在整体运行分: 1.词法分析期: 2.运行期:自上而下执行之前,先有一个词法分析过程 分析 : 1.先分析t1函数 t1(){ var str2 //分析出, t1内有str2 局部变量,此时为函数未执行 //因此str2的值是undefined } 2.执行t1函数 console.log(str1) //global console.log(str2) //undefinde2.解释:
词法分析:
1.先分析参数;
2.再分析变量声明;
3.分析函数声明;
一个函数能使用的局部变量,就从上面的3步分析而来
具体步骤:1.函数运行前的一瞬间,生成 Active Object(活动对象);2. 2.1 函数声明的参数,形成AO的属性,参数的值即属性的值; 2.2 接收实参,形成AO相应的属性值3.分析变量声明,如 var xxx 1.如果AO上还没有 xxx 属性,则添加AO属性, 值是undefined 2.如果AO上己经有 xxx 属性,则不做任何影响4.分析函数声明:如 function foo(){}, 1.把函数赋值给 AO.foo 属性 2.如果此前 foo 属性已存在,则覆盖之前的
实例1:
function t5(greet){ var greet ='hello'; alert(greet); function greet(){ } alert(greet);}t5(null);/* * 词法分析过程: *1.形成活动对象:AO={}; *2. * 2.1分析参数:AO ={greet:undefined}; * 2.2接收参数:AO={greet:null}; *3.分析greet变量声明,AO已经有greet属性,因此不做任何影响; *4.分析greet函数声明,AO.greet = function() {} ,被覆盖成函数 * *执行过程: * greet = 'hello'; * alert(greet); //hello * alert(greet);//hello */
实例2:
function a(b){ alert(b); b = function(){ alert(b); } b();}a(1);/** * 分析期: *1.AO={}; *2. * 2.1分析参数 AO = {b:undefined} * 2.2接收参数 AO = {b:1}; *3.分析var声明,此函数没有var *4.分析函数声明,没有函数声明; * * 执行期: * 1.alert(b); 1 * 2.b = function(){ * alert(b); * } * 3.b(); //function * 注:是赋值,只有在执行时才有效; *b = function(){ * alert(b); * } * **/
实例3:
function a(b){ alert(b); function b(){ alert(b); } b();}a(1);/* *分析期: *1.AO={}; *2. * 2.1分析参数 AO = {b:undefined}; * 2.2接收参数 AO = {b:1}; *3.分析var声明,此函数没有var *4.分析函数声明, AO = {b:function(){}} *执行期: * 1.alert(b); function * 2.b(); //由作用域寻找到a函数中的b,即 function */
0 0
- javascript之词法分析
- javascript词法分析
- JavaScript词法分析过程
- javascript--词法分析
- javaScript词法分析
- 也谈javascript词法分析
- 再谈javascript的词法分析
- JAVASCRIPT作用域链,词法分析
- 2、JavaScript高级之词法分析
- javascript词法分析自己的个人理解。
- 实例分析 JavaScript 词法作用域
- 简述 JavaScript 作用域与词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- Struts2 框架验证
- 在centos6.5下安装MySQL遇到的些许问题
- MySQL数据库的环境配置和基本操作windows
- 多线程---自旋锁、互斥锁区别
- Acer4745G笔记本蓝牙驱动安装
- javaScript词法分析
- jquery操作select(取值,设置选中)
- c语言:链栈的实现
- Android中动态设置布局高度一致
- 深入理解Java的接口和抽象类
- ios 符号化 crash的方法
- ISO8583报文
- Spring websocket over STOMP使用指南
- cocoapods 的安装步骤 及使用安装第三方框架