十、递归 作用域
1、递归 :找规律 找出口
2、作用域
(1)定义:变量(变量作用于又称上下文)和函数生效(能被访问)的区域
里层可以访问外层,外层不可访问内层
(2)全局、局部变量
(3)作用域的访问顺序
十一、预编译
(js三部曲:语法分析---预编译---解释执行)
1、语法分析:通篇扫描,不执行
2、预编译前知识:
(1)imply global 暗示全局变量:即任何变量未经声明就赋值,此变量就为全局对象所有。
a = 10;
window.a =10;
(2)一切声明的全局变量,全是window的属性。
var b = 234;
相当于:
window {
a : 123;
}
window就是全局 console.log(a);---console.log(window.a)
3、预编译
(1)函数声明整体提升:函数可以自动提到逻辑最前面
变量 声明提升: 仅仅可以将声明提到前面,不能改变赋值
(2)预编译发生在函数执行前
过程:
a.创建AO对象 activation object (执行期上下文)
AO{ }
b.找形参和变量声明,将形参和变量声明的名作为AO的属性名,值是undefined
c.将实参和形参值统一
d.在函数体里面找函数声明,值赋予函数体(值是函数体) 把函数声明的名作为AO的属性名
--------------
全局的预编译过程:
a.生成一个GO对象 global object GO===window
GO{ }
b.找形参和变量声明,将形参和变量声明的名作为AO的属性名,值是undefined
c.在函数体里面找函数声明,值赋予函数体(值是函数体) 把函数声明的名作为AO的属性名
--------------
3、解释执行: