前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航

JavaScript词法分析和作用域闭包

首页
2016-07-27 00:50:43
Front-End
JavaScript
  • 在函数运行时 会进词法分析(预编译)
  • 预编译做了哪些工作
    • 分析参数
    • 分析变量声明(分析带var的变量声明)
    • 分析函数声明
  • 如何分析变量声明?
    • 答:对于var声明的变量 以var str = ‘local’为例,分为 分析过程 和执行过程 先分析后执行 先分析var str 即仅仅声明了一个str变量 str变量此时没有赋值 值是undefined 然后在进行执行过程
/*var age = 22;
var num = 99;

 function t(){
 	var num = 88;
 	var str = 'hello';

 	function a(){

 		var  str = 'world';
 		alert(str);//world
 		alert(num);//88
 		alert(age);//22
 	}
 	a();


 }

 t();
 
@前端进阶之旅: 代码已经复制到剪贴板

/*var str = 'global';

function t(){
   alert(str);//undefined
   var str = 'local';//local
   alert(str);

   //词法分析
   var str;

   //执行语句
   alert(str)
   str = 'local'
   alert(str)


}

t();

@前端进阶之旅: 代码已经复制到剪贴板
  • 活动对象、激活对象 Active Object

  • AO上有哪些属性:

  • 对于函数的AO属性来自三个方面

    • 参数
    • 局部变量声明
    • 函数声明
  • 在函数调用瞬间 AO这样形成

  • 首先分析参数 把分析的的参数形成AO属性 如果传来实参 则把实参赋给相应的属性

  • 其次分析var声明 以var str= hello为例 把str声明为AO的属性 值为undefined

  • 如果var声明的变量名与形参名称一致 不产生影响 因为AO的str已经存在

  • 最后分析函数声明, function函数名(){}//有函数名

  • 函数的变量有其作用域,引用某变量时,在某个范围内查询该变量,这个范围又在哪里?在AO上找 在函数调用的瞬间 会产生一个AO 这个AO对象的属性 即存储着该函数所能引用的到的变量

var str = 'global';

function t(age){
	alert(age);//99
	var age = 12;
	alert(age);//12

}
t();
@前端进阶之旅: 代码已经复制到剪贴板

对上面的结果进行分析:

AO:{age:undefined} //词法分析得到 AO:{age:99} //实参赋值 AO.age属性 AO:{age:12} //修改AO.age的值

function f(age,hei){
	var age;
	alert(age);
	function age(
fe

← parsetInt-parsetFloat与eval-isNaN用法JavaScript面向对象程序设计 →