js--闭包

 /*
    * 闭包的概念:函数A中,有一个函数B,函数B中可以访问函数A中定义的变量或者是数据,此时形成了闭包(这句话暂时不严谨)
    * 闭包的模式:函数模式的闭包,对象模式的闭包
    * 闭包的作用:缓存数据,延长作用域链
    * 闭包的优点和缺点:缓存数据
    *
    * 闭包的应用
    *
    *
    * */


    //函数模式的闭包:在一个函数中有一个函数
//    function f1() {
//      var num=10;
//      //函数的声明
//      function f2() {
//        console.log(num);
//      }
//      //函数调用
//      f2();
//    }
//    f1();
//
    //对象模式的闭包:函数中有一个对象

//    function f3() {
//      var num=10;
//      var obj={
//        age:num
//      };
//      console.log(obj.age);//10
//    }
//    f3();





// 产生三个随机数,但是都是不同的
function showRandom() {
    var num = parseInt(Math.random() * 10 + 1);
    console.log(num);
}
showRandom();
showRandom();
showRandom();


 //闭包的方式,产生三个随机数,但是都是相同的


function showRandom1() {
    var num1 = parseInt(Math.random() * 10 + 1);
    return function(){
        console.log(num1);
    }
}

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

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

//局部变量是在函数中,函数使用结束后,局部变量就会被自动的释放
//闭包后,里面的局部变量的使用作用域链就会被延长
点赞案例,注释的内容不是
<!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 {
      width: 200px;
      height: 180px;
    }

    input {
      margin-left: 30%;
    }
  </style>
  <script>
    //$永远都是24k纯帅的十八岁的杨哥$
  </script>
</head>
<body>
<ul>
  <li><img src="images/ly.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
  <li><img src="images/lyml.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
  <li><img src="images/fj.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
  <li><img src="images/bd.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
</ul>
<script>

  //获取所有的按钮
  //根据标签名字获取元素
  // function my$(tagName) {
  //   return document.getElementsByTagName(tagName);
  // }
  // //闭包缓存数据
  // function getValue() {
  //   var value1=2;
  //   return function () {
  //     //每一次点击的时候,都应该改变当前点击按钮的value值
  //     this.value="赞("+(value1++)+")";
  //   }
  // }
  // //获取所有的按钮
  // var btnObjs=my$("input");
  // //循环遍历每个按钮,注册点击事件
  // for(var i=0;i<btnObjs.length;i++){
  //   //注册事件
  //   btnObjs[i].οnclick=getValue();
  // }



  function my$(tagName) {
      return document.getElementsByTagName(tagName);
  }
function getValue() {
    var value1=2;
    return function (){
        //this为当前按钮
        this.value="赞("+(value1++)+")";
    }
}
var btnobj=my$("input");
for(var i=0;i<btnobj.length;i++)
{
    btnobj[i].οnclick=getValue();
    // btnobj[i].οnclick=function () {
    //
    // }
}
//  var btnObjs=my$("input");
//  var value=1;
//  //循环遍历每个按钮 这样有bug
//  for(var i=0;i<btnObjs.length;i++){
//
//    //为每个按钮注册点击事件
//    btnObjs[i].οnclick=function () {
//      console.log("哈哈");
//      this.value="赞("+(value++)+")";
//    };
//  }


</script>
</body>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值