闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数内部创建另一个函数。此时内部函数具有访问自身作用域、外部函数作用域、全局作用域。而外部函数则只有访问自身作用域和全局作用域,不具备范围内部函数作用域。
var num1 = 1;
function out(){
var num2 = 2;
function(){
var num3 = 3;
system.log(num2);
system.log(num1);
}
//system.log(num3); //wrong
}
闭包引出的问题:闭包只能取得包含函数中任何变量的最后一个值
function createFunctions(){
var result = new Array();
for(var i=0;i<10;i++){
result[i] = function(){
return i;
};
}
return result;
}
在闭包中使用this对象导致的问题:匿名函数的执行环境具有全局性,因此this通常指向window
var name="window";
var object = {
name: "object",
getNameFunc: function(){
return function(){
return this.name;
};
}
}
alert(object.getNameFunc()()); //window