闭包常见应用场景

总结

作者 Trekerz 日期 2019-09-16
闭包常见应用场景
  1. 概述

    闭包实质:将内部函数传递到所在的词法作用域以外,内部函数仍然持有对原始定义作用域的引用

  2. 应用

    (1) 定时器
    <script type="text/javascript">
    function wait(message) {
    setTimeout(function timer() {
    //延时函数回调函数timer
    //timer内部函数具有涵盖wait函数作用域的闭包,还有对变量message的引用
    console.log(message);
    }, 1000)
    }
    wait('闭包函数应用')
    </script>
    (2) 事件监听器
    <script type="text/javascript">
    function test() {
    var a = 0;
    //事件监听器 保持对test作用域的访问
    $('ele').on('click', function() {
    a++;
    });
    }
    </script>
    (3) ajax
    <script type="text/javascript">
    !function() {
    var localData = "localData here";
    var url = "http://www.baidu.com/";
    //ajax使用了localData,url
    $.ajax({
    url: url,
    success: function() {
    // do sth...
    console.log(localData);
    }
    });
    }();
    </script>
    (4) 异步(同步)操作

    只要使用了回调函数,实际上就是使用了闭包。

    (5) 模块
    <script type="text/javascript">
    var foo = (
    function Module() {
    var something = 'cool';
    var another = [1, 2];

    function doSomething() {
    console.log(something)
    }

    function doAnother() {
    console.log(another.join(','))
    }
    return {
    doSomething: doSomething,
    doAnother: doAnother
    }
    }
    )();
    foo.doSomething();
    foo.doAnother();
    </script>


–end–