美文网首页
闭包实例

闭包实例

作者: 在下高姓 | 来源:发表于2020-09-29 23:18 被阅读0次

标签: 实例


正文
/* 例子1 */

function funA(){
  var a = 10;  // funA的活动对象之中;
  return function(){   //匿名函数的活动对象;
        alert(a);
  }
}
var b = funA();
b();  //10

/* 例子2 */

function outerFn(){
  var i = 0; 
  function innerFn(){
      i++;
      console.log(i);
  }
  return innerFn;
}
var inner = outerFn();  //每次外部函数执行的时候,都会开辟一块内存空间,外部函数的地址不同,都会重新创建一个新的地址
inner();
inner();
inner();
var inner2 = outerFn();
inner2();
inner2();
inner2();   //1 2 3 1 2 3

/* 例子3 */

var i = 0;
function outerFn(){
  function innnerFn(){
       i++;
       console.log(i);
  }
  return innnerFn;
}
var inner1 = outerFn();
var inner2 = outerFn();
inner1();
inner2();
inner1();
inner2();     //1 2 3 4

/* 例子4 */

function fn(){
    var a = 3;
    return function(){
        return  ++a;                                     
    }
}
alert(fn()());  //4
alert(fn()());  //4    

/* 例子5 */

function outerFn(){
var i = 0;
  function innnerFn(){
      i++;
      console.log(i);
  }
  return innnerFn;
}
var inner1 = outerFn();
var inner2 = outerFn();
inner1();
inner2();
inner1();
inner2();    //1 1 2 2

/* 例子6 */

(function() { 
  var m = 0; 
  function getM() { return m; } 
  function seta(val) { m = val; } 
  window.g = getM; 
  window.f = seta; 
})(); 
f(100);
console.info(g());   //100  闭包找到的是同一地址中父级函数中对应变量最终的值

/* 例子7 */

function a() { 
  var i = 0; 
  function b() { alert(++i); } 
  return b; 
} 
var c = a(); 
c();      //1 
c();      //2 

/* 例子8 */

function f() { 
  var count = 0; 
  return  function() { 
      count++; 
      console.info(count); 
  } 
} 

var t1 = f();
t1();     //1 
t1();     //2 
t1();     //3 

/* 例子9 */

var add = function(x) { 
  var sum = 1; 
  var tmp = function(x) { 
      sum = sum + x; 
      return tmp;    
  } 
  tmp.toString = function() { 
      return sum; 
  }
  return tmp; 
} 
alert(add(1)(2)(3));     //6

/* 例子10 */

var lis = document.getElementsByTagName("li");
for(var i=0;i<lis.length;i++){
  (function(i){
      lis[i].onclick = function(){
           console.log(i);
      };
  })(i);       //事件处理函数中闭包的写法
}  

/* 例子11 */

function m1(){
     var x = 1;
     return function(){
          console.log(++x);
     }
}
 
m1()();   //2
m1()();   //2
m1()();   //2
 
var m2 = m1();
m2();   //2
m2();   //3
m2();   //4

/* 例子12 */

var  fn=(function(){
   var  i=10;
   function  fn(){
      console.log(++i);
   }
   return   fn;
})() 
fn();   //11
fn();   //12

/* 例子13 */

function love1(){
     var num = 223;
     var me1 = function() {
           console.log(num);
     }
     num++;
     return me1;
}
var loveme1 = love1();
loveme1();   //输出224

/* 例子14 */

function fun(n,o) {
    console.log(o);
    return {
         fun:function(m) {
               return fun(m,n);
         }
    };
}
var a = fun(0);  //undefined
a.fun(1);  //0  
a.fun(2);  //0  
a.fun(3);  //0  
var b = fun(0).fun(1).fun(2).fun(3);   //undefined  0  1  2
var c = fun(0).fun(1);  
c.fun(2);  
c.fun(3);  //undefined  0  1  1

/* 例子15 */

function fn(){
   var arr = [];
   for(var i = 0;i < 5;i ++){
     arr[i] = function(){
         return i;
     }
   }
   return arr;
}
var list = fn();
for(var i = 0,len = list.length;i < len ; i ++){
   console.log(list[i]());
}  //5 5 5 5 5

/* 例子16 */

function fn(){
  var arr = [];
  for(var i = 0;i < 5;i ++){
    arr[i] = (function(i){
        return function (){
            return i;
        };
    })(i);
  }
  return arr;
}
var list = fn();
for(var i = 0,len = list.length;i < len ; i ++){
  console.log(list[i]());
}  //0 1 2 3 4

相关文章

  • 学习JS笔记(第七章-闭包,作用域)

    闭包的概念## 闭包实例## 数据传递更加灵活### 常见错误之循环闭包### 封装变量### 闭包小结## 作用...

  • Swift 之闭包

    闭包1.闭包表达式语法 2.闭包和类的强引用 当将一个闭包赋值给一个类实例的属性,并且闭包体捕获这个实例时,也可能...

  • 闭包实例

    标签: 实例 正文/* 例子1 */ /* 例子2 */ /* 例子3 */ /* 例子4 */ /* 例子5 *...

  • 闭包实例

    如下代码输出多少?如果想输出3,那如何改造代码? 输出10 改造后的代码 let方式 立即执行函数方式 封装一个C...

  • Swift 闭包

    1、闭包简介 在讲解闭包之前,我们先讲解一下OC中的block 2、 闭包基本使用 3、闭包的参数和返回值 实例:...

  • Swift解决【闭包引起的循环强引用】

    循环强引用还会发生在当你将一个闭包赋值给类实例的某个属性,并且这个闭包体中又使用了这个类实例时。这个闭包体中可能访...

  • Swift 闭包

    1.标准闭包1.1实例1.1.1声明 2.尾随闭包 ,适用于闭包的表达式比较长,需要是最后一个参数2.1 尾随闭包...

  • 关于闭包

    最终实例效果 Swift闭包的作用和OC中的block一致1、保存代码2、做耗时操作 1、闭包 写法 闭包作为函数...

  • Swift闭包注意事项

    解决闭包的循环强引用 在定义闭包时同时定义捕获列表作为闭包的一部分,通过这种方式可以解决闭包和类实例之间的循环强引...

  • Swift 中的 Sendable 和 @Sendable 闭包

    Sendable 和 @Sendable 闭包 —— 代码实例详解 Sendable 和 @Sendable 是 ...

网友评论

      本文标题:闭包实例

      本文链接:https://www.haomeiwen.com/subject/cwvyuktx.html