js中的闭包

作者: 西域战神 | 来源:发表于2022-05-31 20:56 被阅读0次

闭包是一种语法特性,指在一个函数中访问了外部的自由变量

{
  let count = 0;
  const add = ()=> {
    count += 1  //访问了该作用域外部的自由变量count
  }
}
{
  let money = 100;
  window.getMoney= function (){ return money;}
  window.use = () => { money -= 1}
  window.earn = () => { money +=1 }
}

通过访问getMoney能间接获取money的值,调用use和earn会更新money的值,我们在作用域以外
无法直接访问money这个变量

闭包的应用:

const add2 = function (){
  let total = 0
  return function add(){
    total+=1  //访问了外部作用域的total
}
  
add2() // 相当于调用了add(),执行了total+=1

解决的问题:

  1. 避免污染全局的环境
  2. 提供对变量的间接访问
  3. 维持变量,避免被垃圾回收

缺点:

使用不当会造成“内存泄漏”

function example(){
  var x = {name:'x'}
  var y = {name:'y',description:'----- 1000多个字符-----'}
  return function fn(){
    return x;
  }
}
const myFn = example()
const myX = myFn() // 对于正常浏览器 y会在一段时间后消失

在example中 x被使用,但 y并没有被使用。在旧版IE中,只要某个函数中的某个变量被使用,那么该函数中的其它未被使用的变量也不会被垃圾回收。

相关文章

  • JS闭包大结局(JS闭包系列3)

    在上一篇中再谈JS闭包(JS闭包系列2),我详细的介绍了JS中的变量作用域相关的概念,结合第一节关于JS闭包(JS...

  • 简单的聊一下闭包

    js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...

  • 浅谈闭包

    js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • JS闭包

    JS闭包 闭包练习

  • 再谈JS闭包(JS闭包系列2)

    这篇文章,来继续谈谈Javascript闭包的剩余问题。因为在上一篇文章中关于JS闭包(JS闭包系列1)主要简单的...

  • 2018-01-10

    js中的闭包 一.什么是闭包 闭包官方的解释是:闭包就是能够读取其他函数内部变量的函数。由于在javascr...

  • js经典题目

    1闭包 链接:学习Javascript闭包(Closure) setTimeout在js单线程中只是放在队列中并未...

  • 前端面试题(持续补充)

    js,node.js基础: 闭包 闭包是能够读取其他函数内部变量的函数。在js中,只有函数内部的子函数可以访问内部...

网友评论

    本文标题:js中的闭包

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