在一个函数内部创建另一个函数
例如:
function a () {
var a = 'a';
function b () {
//...
}
}
这里的b函数就是闭包
3. 闭包的作用域链
闭包除了包含自身变量外还包含了其包含函数的活动对象,**但注意闭包不能访问包含函数的this对象**,
**当访问this对象时,this指向的是window对象,**
除非把包含函数(外部函数)的this对象保存到闭包能够访问的变量里。
例如:
function a () {
var a = 'a';
var that = this;
function b () {
return that.a; // a
//...
}
}
4.闭包与变量
闭包只能取得包含函数中任意变量的最后一个值
例如:
function creatArray () {
var result = new Array();
for (var i = 0; i < 5; i++) {
result[i] = function () {
return i;
}
}
return result; //[5, 5, 5, 5, 5]
}
这是因为每个函数的作用域中都保存creatArray()函数的活动对象,所以他们引用的是同一个变量i,
当createArray()函数返回的时候,变量i的值是5,故每个函数内部的i都是5。
我们可以通过创建另一个匿名函数来解决:
function creatArray () {
var result = new Array();
for (var i = 0; i < 5; i++) {
result[i] = function (num) {
return function() {
return num;
}
}**(i);** //立即执行该匿名函数的结果传入数组
}
return result;
}
1、什么是闭包有权访问另一个函数作用域中的变量的函数2.创建闭包的方式在一个函数内部创建另一个函数例如:function a () { var a = 'a'; function b () { //... }}这里的b函数就是闭包3. 闭包的作用域链闭包除了包含自身变量外还包含了其包含函数的活动对象,**但注意闭包不能访问包含函数的this对象**,**当访问thi...