• 你不知道的JS系列 ( 14 ) - 闭包无处不在


    上一节的闭包是为了解释如何使用闭包而人为地在结构上进行修饰,在昨天的闭包基础上,我们可以更加灵活的使用闭包
    function wait(message){
      setTimeout(function timer(){
        console.log(message)
      }, 1000)
    }
    wait('hello, consure');
    内部函数 timer 传递给 setTimeout()。timer 具有涵盖 wait() 作用域的闭包,因此还保有对变量 message 的引用。
    深入到引擎的内部原理中,内置函数 setTimeout 持有对一个参数的引用,引擎会调用这个函数。在这个例子就是 timer 函数,而词法作用域在这个过程中保持完整,这就是闭包。
    function setupBot(name, selector){
      $(selector).click(function activator){
        console.log('Activating:' + name)
      }
    }
    setupBot('Closure Bot 1', '#bot_1');
    setupBot('Closure Bot 2', '#bot_2');

    本质上无论何时何地,如果将函数当作第一级的值类型并到处传递,你就会看到闭包在这些函数中的应用。在定时器、事件监听器、ajax 请求,跨窗口通信,web workers 或者任何其他的异步或者同步任务中,只要使用了回调函数,实际上就是在使用闭包

  • 相关阅读:
    struts2的核心和工作原理
    Java操作redis【二十】
    优化【十九】
    管线【十八】
    服务器管理【十七】
    虚拟内存【十六】
    Eclipse:使用findBugs预先检测错误
    linux命令学习(1)
    Android中Linux suspend/resume流程
    Ubuntu12.04下eclipse提示框黑色背景色的修改方法
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12359878.html
Copyright © 2020-2023  润新知