一般来讲,当函数执行完毕后,局部活动对象就会被销毁内存中仅保存全局作用域(全局执行环境的变量对象),但闭包又有所不同,
在另一个函数内部定义的函数会将包含函数(外部函数)的活动对象添加到它的作用域链中。当外部函数执行完毕后,其活动对象不会被销毁
因为内部函数的作用域链仍然在引用这个活动对象,。换句话说,当外部函数的执行完后,其执行环境的作用域链会被销毁,但他的活动对象
仍然会留在内存中,直到内部幻术被销毁后,外部的函数对象才会被销毁。
闭包域变量
闭包不属于任何对象,它不是一个对象的方法(就不能使用点运算符来调用)
闭包只能取得包含函数中任何变量的最后一个值,闭包所保存的是整个变量对象,而不是某个特殊的变量
function createFunction(){
var result = new Array();
for(var i = 0;i< 10;i++){
console.log(i)//1,2,3,4,5,6,7,8,9,10
setTimeout(result[i] = function(){
console.log(this,390)//window;;匿名函数中的this指向的是windows,和全局变量一样
console.log(i)//i=10
return i;
})
}
console.log(result)//打印出数组函数,打印出10个匿名函数function(){}
return result;
}
createFunction();