JS之闭包的应用

2021-02-04 05:15

阅读:451

YPE html>

标签:$()   device   匿名   nts   charset   view   绑定   counter   length   

闭包的应用

在什么场合下用

  • 1、保护变量;用自运行的匿名函数来实现;
  • 2、协调异步代码;自运行的匿名函数来实现,并且传参进去(异步代码需要用到原来的变量,通过作为函数的参数传进去);

  

保护变量:

  • 实例:循环赋值函数(循环绑定函数)




Document

0000

1111

2222

3333

4444

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

for (i = 0; i 

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

for (i = 0; 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
  • 实例: JQuery的全局调用
(function () {
    var jQuery = function () {
      console.log("核心代码");
    };
    window.jQuery = window.$ = jQuery;
})();
jQuery(); // 核心代码
$(); // 核心代码
  • 实例:

    多参数的函数变成单参数的函数。例如,要计算 ${x^y}$ 可以用Math.pow(x, y)函数,不过考虑到经常计算x2或x3,我们可以利用闭包创建新的函数pow2pow3

    ‘use strict‘;
    
    function make_pow(n) {
        return function (x) {
            return Math.pow(x, n);
        }
    }
    // 创建两个新函数:
    var pow2 = make_pow(2);
    var pow3 = make_pow(3);
    
    console.log(pow2(5)); // 25
    console.log(pow3(7)); // 343
    

协调异步代码:

  • 实例:动画 setTimeout实现把p相对上一个p向右移动100px;1秒中只实现一个p的移动;

    setTimeout本身是同步的代码,但是setTimeout里面的函数是异步的代码setTimeout告诉浏览器隔多少秒执行里面的函数;这个函数是脱离执行顺序的;属于异步代码;

var oDiv = document.getElementById("div1");
var oPs = oDiv.getElementsByTagName("p");
for (i = 0; i 

refers:

廖雪峰老师

朱安邦的JS笔记

JS之闭包的应用

标签:$()   device   匿名   nts   charset   view   绑定   counter   length   

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


评论


亲,登录后才可以留言!