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

Posted Zina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你不知道的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 或者任何其他的异步或者同步任务中,只要使用了回调函数,实际上就是在使用闭包

以上是关于你不知道的JS系列 ( 14 ) - 闭包无处不在的主要内容,如果未能解决你的问题,请参考以下文章

《你不知道的JS(上卷)》作用域闭包

读书笔记-你不知道的JS上-闭包与模块

js随笔 (你不知道的js)

JS你不知道的JavaScript 笔记—— 作用域与闭包 - 编译原理 - LHS - RHS - 循环与闭包 - 模块 - 词法作用域 - 动态作用域

你不知道的JavaScript(作用域和闭包)

你不知道的JS