1. 作用域链
变量在当前环境now、内部环境f1,内部深层环境f2/f3...都起作用的现象形成了一个链条,这个链条就成为变量的"作用域链"
2. 作用域链的作用
2.1 变量必须"先声明,后使用"
函数可以"先使用,后声明",原因是函数有预加载的过程(函数声明先于其他执行代码进入内存).本质还是函数声明在前,使用在后.
2.2 内部环境变量可以访问外部环境的变量,反之不然.
环境: 每一个函数内部都是一个环境,最外边是全局环境.
类型: 函数环境、全局环境
2.3 变量的作用域是声明时觉得的,而不是运行时
3. AO活动对象
Active Object 活动对象(抽象的)
执行环境:
js代码执行是有环境的(全局环境,函数内部环境)
该环境定义了其有权访问的其他数据
环境有一个与之关联的"活动对象AO"
环境中所以的变量和函数都是活动对象AO的属性
全局环境是最外围的执行环境,活动对象是window对象
执行环境中的代码执行完毕后就被销毁
4. 变量的类型及优先
执行环节可以访问变量的类型及优先顺序
内部变量>>>内部函数>>>形参>>>外部变量(函数,形参);
5. 重新认识一下全局变量和局部变量
5.1 全局变量
声明:
1. 在函数外部声明的变量
2. 在函数内部不使用var声明的变量(前提是函数执行之后才起作用)
全局变量 是活动对象window的成员信息
在访问的时候,window是否设置都可以,如果设置window可以提高代码的可读性
5.2 局部变量
声明:
在函数内部通过var声明的变量就是局部变量
重新认识:
局部变量 相对概念上看,在一定范围内可以看做是"全局变量".其在本环境,内部环境,内部深层环境都可以被访问。
6.闭包
1. 闭包就是一个函数,两个函数彼此嵌套,内部函数就是闭包,形成闭包条件是内部函数需要通过return给返回出来.
2.闭包使用规则
同一个闭包机制可以创建多个闭包函数出来,它们彼此没有联系,都是独立的,而且每个闭包函数都可以保存自己个性化的信息
3.闭包案例
3.1 闭包生成数组元素
失败案例
成功案例
4.2 闭包事件操作
这种写法必须使用this.style,如果使用lis[I].style会报错,因为for循环执行会导致所有的function访问的都是同一个i变量,而i变量有多个,所有lis[i]获取不到标签元素,因此会报错.如果要使用lis[i].style这种方式去进行操作,需要我们使用闭包来进行操作.闭包的特点是保证闭包函数内的信息是独立的,非常符合这种情况
使用闭包前的写法
使用闭包后的写法












网友评论