JS之闭包的应用

时间:2020-06-16 22:37:37   收藏:0   阅读:70

闭包的应用

在什么场合下用

  

保护变量:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
<div id="div1">
  <p>0000</p>
  <p>1111</p>
  <p>2222</p>
  <p>3333</p>
  <p>4444</p>
</div>
<script>
var oDiv = document.getElementById("div1");
var oPs = oDiv.getElementsByTagName("p");
for (i = 0; i < oPs.length; i++) {
  (function (i){
    oPs[i].onclick = function () {
      console.log(i);
    }
  })(i);
}
</script>
</body>

上面的也可以改造成这样的;(也是闭包的应用)

for (i = 0; i < oPs.length; i++) {
    oPs[i].onclick = function (i) {
        return function(){console.log(i);}
    }(i)
}

如果我们把代码改成这样:

for (i = 0; i < oPs.length; i++) {
    oPs[i].onclick = function () {
      console.log(i);
    }
}

则点击每个标签的结果都是 5

‘use strict‘;

function create_counter(initial) {
    var x = initial || 0;
    return {
        inc: function () {
            x += 1;
            return x;
        }
    }
}

var c1 = create_counter();
c1.inc(); // 1
c1.inc(); // 2
c1.inc(); // 3
(function () {
    var jQuery = function () {
      console.log("核心代码");
    };
    window.jQuery = window.$ = jQuery;
})();
jQuery(); // 核心代码
$(); // 核心代码

协调异步代码:

var oDiv = document.getElementById("div1");
var oPs = oDiv.getElementsByTagName("p");
for (i = 0; i < oPs.length; i++) {
    (function(i){
        setTimeout(function(){
            oPs[i].style.left=100*i+"px";
        },i*1000)
    })(i);
}

refers:

廖雪峰老师

朱安邦的JS笔记

原文:https://www.cnblogs.com/jiaweixie/p/13149587.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!