匿名函数与闭包

  • 普通函数
function box(){
  return 'Lee';
}
alert(box());  //Lee
  • 匿名函数
function (){       //单独的匿名函数是无法运行的 ,就算能运行也无法调用 因为没有名称
  return 'Lee';
}
  • 把匿名函数赋值给变量
var box=function  () {
  return 'Lee';
}
alert(box());  //Lee
  • 通过自我执行来执行匿名函数
(function (){
   alert('Lee');   //Lee
})();
  • 把匿名函数自我执行的返回值付给变量
var box=(function  () {
  return 'Lee';
})();
alert(box); //Lee  
  • 自我执行后用alert打印
alert((function  () {
  return 'Lee';
})());
  • 自我执行匿名函数的传参
(function  (age) {
  alert(age);
})(100);

函数里面放匿名函数(形成闭包)

function box(){
   return function(){    //形成闭包
      return 'Lee';
   }
}
alert(box()());  //Lee

//另一种返回方法
//var b=box();
//alert(b());

创建闭包的常见方式就是一个函数的创建另一个函数,通过另一个函数访问这个函数的局部函数

function box(){
  var age='100';
  return function (){
    return age;
  }
}
alert(box()());  //100

使用全局变量进行累加

var age='100';  //全局变量
function box(){
   age++
}
//alert(age) //全局 100
box();
alert(age); //101
box();
alert(age);  //102
box();
alert(age);   //103

使用局部变量进行累加

function box(){
  var age='100';
  age++
  return age;
}
alert(box()); //101   不管执行多少次都是101  放在里面每次都被初始化了
alert(box()); //101
alert(box()); //101

使用匿名函数实现变量驻留在内存中从而实现累加

function box(){
   var age=100;
   return function(){
     age++;
     return age;
   }
}
var b = box();
alert(b());  //101
alert(b());  //102
alert(b());  //103

循环里的匿名函数的取值问题

//使用较多的一种方法
function box(){
  var arr=[];
  for(var i=0; i<5; i++){   
    arr[i]=(function(num){    //通过自我即使执行匿名函数
      return function(){    //因为闭包可以将变量驻留在内存中中,和上节课的累加是一个道理
        return num;
      };
    })(i);
   }
//已经执行完毕了,num为什么可以0,1,2,3,4
    return arr;
  }
var b= box();
for(var i=0;i<5;i++){
  alert(b[i]());
}

关于This对象

var box={
  getThis:function (){
    return this;
  }
}
alert(this);  //[object window] 
alert(box.getThis());  //[object object]
//this的指向问题
var user='the window';
var box={
  user:'The Box',
  getUser:function(){
    return function(){
      return this.user;
    };
  }
}
alert(user);  //the window
alert(box.getUser()());  //The window  特别注意: 闭包在运行时指向window

如何闭包里面this指向box(方法一:使用对象冒充)

var user='the window';
var box={
  user:'The Box',
  getUser:function(){
    return function(){
      return this.user;
    };
  }
}
alert(box.getUser()());  //the window;
alert(box.getUser().call(box)); //the box  对象冒充

如何让闭包里的this指向box(方法2:改变作用域)

var user = 'the window';
var box= {
   user:'the box',
   getUser:function(){   //这里的作用域是box
      var that = this;    //把这里的作用域赋值给下面的作用域
   }
   return function(){    //这里的作用域是Window
     return that.user;
   }
}
alert(box.getUser()());  //The Box
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值