闭包‘


一般来讲,当函数执行完毕后,局部活动对象就会被销毁内存中仅保存全局作用域(全局执行环境的变量对象),但闭包又有所不同,

在另一个函数内部定义的函数会将包含函数(外部函数)的活动对象添加到它的作用域链中。当外部函数执行完毕后,其活动对象不会被销毁

因为内部函数的作用域链仍然在引用这个活动对象,。换句话说,当外部函数的执行完后,其执行环境的作用域链会被销毁,但他的活动对象

仍然会留在内存中,直到内部幻术被销毁后,外部的函数对象才会被销毁。

闭包域变量

闭包不属于任何对象,它不是一个对象的方法(就不能使用点运算符来调用)

闭包只能取得包含函数中任何变量的最后一个值,闭包所保存的是整个变量对象,而不是某个特殊的变量

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();

猜你喜欢

转载自www.cnblogs.com/psxiao/p/11373874.html