• 匿名函数和闭包


     1 //普通函数
     2 function Box(){
     3     return "Lee";
     4 }
     5 //匿名函数
     6 function () {               //单独的匿名函数是无法运行的,也无法调用
     7       return"Lee";
     8 }
     9 
    10 //把匿名函数赋值给变量
    11  var box =  function(){
    12    return "Lee";
    13 };
    14 alert(box())
    15 
    16 //通过自我执行来执行匿名函数
    17 (function(){          //(匿名函数)()     第一个括号放匿名函数 第二个括号执行
    18     alert("Lee");
    19 })();
    20 
    21 //把匿名函数自我执行的返回值赋给变量
    22 var box = (function(){  
    23     return "Lee";
    24 })();
    25 alert(box);
    26 
    27 //自我执行匿名函数的传参
    28 (function(){  
    29     alert(age);
    30 })(100);
    31 
    32 //函数里放一个匿名函数
    33 function box(){
    34    return function(){    //闭包
    35    return "Lee"
    36 }
    37 }
    38 alert(box()())

    闭包

     1 //通过闭包返回局部变量
     2 function box(){
     3     var age = 100;
     4     return function(){
     5      return age;
     6 }
     7 }
     8 alert(box()())
     9 
    10 //使用全局变量进行累加
    11 var age =100;
    12 functon box(){
    13   age++;
    14 }
    15 alert(age);
    16 box();
    17 alert(age)
    18 
    19 //使用局部变量累加
    20 functon box(){
    21  var age = 100  
    22 age++;
    23 return age
    24 }
    25 alert(box());  //多少次都是101
    26 
    27 //使用匿名函数实现局部变量驻留内存中从而累加
    28 function box(){
    29    var age =100;
    30    return function(){
    31     age++;
    32    return age;
    33 }
    34 }
    35 var b = box();
    36 alert(b());
    37 alert(b());  //实现累加
    38 b = null; //解除引用 无法再执行

    循环里的匿名函数

     1 functon box(){
     2    var arr = [];
     3    for(var i=0;i<5;i++){
     4    arr[i]=function(){    
     5    return i;
     6 }
     7 }
     8 //循环已经执行完毕 最终是5
     9    return arr;
    10 }
    11 var b=box()
    12 for(var i = 0;i<5;i++){
    13    alert(b[i]())
    14 }
    15 
    16 //
    17 functon box(){
    18    var arr = [];
    19    for(var i=0;i<5;i++){
    20    arr[i]=(function(num){       //通过自我执行匿名函数  
    21    return num
    22 })(i);
    23 }
    24    return arr;
    25 }
    26 var b=box()
    27 for(var i = 0;i<5;i++){
    28    alert(b[i]())
    29 }
    30 
    31 //改2
    32 functon box(){
    33    var arr = [];
    34    for(var i=0;i<5;i++){
    35    arr[i]=function(num){   
    36    return function(){          //闭包可以将变量驻留在内存中
    37         return num;
    38 }
    39 }(i);
    40 }
    41 
    42    return arr;
    43 }
    44 var b=box()
    45 for(var i = 0;i<5;i++){
    46    alert(b[i]())
    47 }

    this对象

    闭包里的this指向window

     1 var user = "The Window"
     2 var box={
     3   user:"The Box",
     4   getUser:functon(){
     5     //这里作用域的this是box
     6     var that = this;
     7    return function(){
     8    //这里作用域this是window
     9    return that.user
    10 }
    11 }
    12 }
    13 
    14 alert(box.getUser()()); //the window
    15 
    16 //对象冒充
    17 1.alert(box.getUser().call(box));  //the box
    18 2.alert(box.getUser()());
  • 相关阅读:
    源代码的下载和翻译
    Git使用入门
    搭建Andriod开发环境
    Andriod系统移植与驱动开发概述
    直观打印二叉树
    深度优先遍历图(DFS)
    《UNIX网络编程 卷1 套接字联网API》(第三版)阅读笔记----2018.5.22
    C/C++
    实现具有getMin功能的栈
    用两个栈来模拟一个队列
  • 原文地址:https://www.cnblogs.com/bhan/p/5513440.html
Copyright © 2020-2023  润新知