• js闭包


    1.js闭包的基本概念

    //总结:如果想要缓存数据,就把这个数据放在外层的函数和里层的函数的中间位置

    //闭包的作用:缓存数据.优点也是缺陷,没有及时的释放

    //局部变量是在函数中,函数使用结束后,局部变量就会被自动的释放
    //闭包后,里面的局部变量的使用作用域链就会被延长

    /*
        * 闭包的概念:函数A中,有一个函数B,函数B中可以访问函数A中定义的变量或者是数据,此时形成了闭包(这句话暂时不严谨)
        * 闭包的模式:函数模式的闭包,对象模式的闭包
        * 闭包的作用:缓存数据,延长作用域链
        * 闭包的优点和缺点:缓存数据
        *
        * 闭包的应用
        *
        *
        * */
       //函数的闭包
      
    
    2.js闭包的小案例
    
    function f1(){
       	var num=10;
       	
       	function f2(){
       		console.log(num);
       	}
       	f2();
       }
    	f1();
    	//对象的闭包
    	function f3(){
    		var num=20;
    		var obj={
    			age:num
    		};
    		console.log(obj.age);		
    	}
    	f3();
       //函数的闭包
       function f2(){
       var num=10;
        return function(){
        num++;
        return num;
        }
        }
        //
        var ff=f2();
        console.log(ff());//11
        console.log(ff());//12
        console.log(ff());//13
    

     3.生成一个重复的随机数

     function showRandom(){
       	var num=parseInt(Math.random()*10+1);
       	return function(){
       		console.log(num);
       	}
       }
       var ff=showRandom();
    ff();
    ff();
    ff();
    

    4.点赞案例

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>对自己狠点</title>
      <style>
        ul {
          list-style-type: none;
        }
    
        li {
          float: left;
          margin-left: 10px;
        }
    
        img {
           200px;
          height: 180px;
        }
    
        input {
          margin-left: 30%;
        }
      </style>
      <script>
        //$永远都是24k纯帅的十八岁的杨哥$
      </script>
    </head>
    <body>
    <ul>
      <li><img  alt=""><br/><input type="button" value="赞(1)"></li>
      <li><img  alt=""><br/><input type="button" value="赞(1)"></li>
      <li><img  alt=""><br/><input type="button" value="赞(1)"></li>
      <li><img  alt=""><br/><input type="button" value="赞(1)"></li>
    </ul>
    <script>
    //点赞案例
    function my$(tagName){
    	return document.getElementsByTagName(tagName);
    }
    //闭包缓存
    function getValue(){
    	var value=1;
    	return function(){ 
    		this.value="赞("+(++value)+")";
    		//this.value="赞("+value+")";
    	}
    }
    
    //获取所有的按钮
    var btnObj=my$("input");
    
    for(var i=0;i<btnObj.length;i++){
    	 btnObj[i].onclick=getValue();
    }
    
    
    
      
    </script>
    </body>
    </html>
    

      

     

  • 相关阅读:
    AMF序列化技巧
    为什么用ByteArray序列化的对象如此小?
    解决Asp.net中翻页问题的自定义用户控件
    新建对象:反射会调用构造函数,clone不会调用构造函数
    Java 的传值小例子
    JDK中设计模式
    tryfinally中的返回值
    c++类中的常量(注意)
    创建有个性的对话框之MFC篇(转)
    用VC在IE浏览器的工具条上添加命令按钮(转 可以借鉴)
  • 原文地址:https://www.cnblogs.com/liushisaonian/p/9462257.html
Copyright © 2020-2023  润新知