作用域--闭包

作者: 死囚鸟 | 来源:发表于2017-06-25 23:40 被阅读0次

本文章引用《你所不知道的Javascript》其实我觉得这一章写的有点像神话,可能只是为了让初学者,后来者不那么害怕。

首先闭包的概念:

当函数可以记住并访问所在的词法作用域,即使函数函数是在当前词法作用域外执行,这时就产生了闭包

那么我们常用的场景有哪些?

(1) 循环我们常常在面试题中遇到这样的问题

for(var i =0;i<5;i++){setTimeout(function timer(){console.log(i)},1000)}

答案是:执行5次5

解释:setTimeout是作为for循环的回调,而for循环执行回调的结果为5.所以结果为5.

那么怎么解决呢

       <method1> IIFE--会为每个迭代生成新的作用域,使得延迟函数的回调可以将新的作用域封闭在每个迭代的内部

for(var i =0;i<5;i++){(function(j){setTimeout(function timer(){console.log(j)},1000)})(i)}

      <method2> 块作用域--let声明,每次循环都会重新声明

       for(let i =0;i<5;i++){setTimeout(function timer(){console.log(i)},1000)}

(2)单例模式--公共一个方法

function coolModule(id){function identify(){console.log(id)}  return {identify:identify}}

定义:var foo1= coolModule('11'); foo1.identify() 等可以被多次调用

相关文章

  • 作用域和闭包

    目录 概述 作用域编译过程词法作用域全局作用域函数作用域 闭包循环和闭包闭包的用途性能 总结 概述 作用域和闭包一...

  • 2018-01-07 关于javascript闭包和作用域的理解

    关于 javascript 闭包的一些思考 作用域 词法作用域 函数作用域 块作用域 闭包 什么是作用域? 作用域...

  • js作用域、闭包

    闭包 闭包作用 全局 局部 作用域链

  • javaScript门道之闭包

    闭包的学习路径:变量的作用域 -> 闭包的概念 ->闭包的应用 1.变量的作用域 变量的作用域分为作用于全局和作用...

  • 14.JS基础之作用域与闭包

    作用域: 全局作用域 函数作用域 块级作用域(ES6新增) 常见的闭包有:作为函数返回值的闭包与作为函数参数的闭包...

  • 执行环境 & 作用域 & 闭包

    执行环境 & 作用域 & 闭包 执行环境 , 作用域 , 闭包 , 闭包应用 执行环境 执行环境定义了 当前环境的...

  • js 总结七07-19

    作用域 全局 局部 作用域链 闭包

  • 2023-01-12

    变量提升调用栈块级作用域作用域链和闭包 闭包 => 作用域链(词法作用域) => 调用栈(栈溢出) => 上下文...

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • js闭包

    由于作用域的关系,函数之间不能相互读取变量,父级作用域不能读取子级作用域的变量。这是闭包出现了。 闭包 闭包就是能...

网友评论

    本文标题:作用域--闭包

    本文链接:https://www.haomeiwen.com/subject/dbqdcxtx.html