首页 > 编程语言 >JavaScript学习笔记—闭包

JavaScript学习笔记—闭包

时间:2023-01-24 16:44:40浏览次数:33  
标签:闭包 function 函数 JavaScript 笔记 num let fn2

1. 定义

闭包就是能访问到外部函数作用域中变量的函数

2. 什么时候使用

当需要隐藏一些不希望被别人访问的内容时就可以使用闭包

3. 构成要件

(1)函数的嵌套
(2)内部函数要引用外部函数中的变量
(3)内部函数要作为返回值返回

function outer(){
  let num = 0;
  return () => {
    num++;
    console.log(num);
  }
}
const newFn = outer();
newFn(); // 1
newFn(); // 2
newFn(); // 3
4. 原理

闭包利用的就是词法作用域

let a = "全局变量a";
/*
  函数作用域,在函数创建时就已经确定(又称词法作用域)
  和调用的位置无关
*/
function fn() {
  console.log(a);
}

function fn2() {
  let a = "fn2中的变量a";
  fn();
}

fn2(); // 全局变量a

function fn3() {
  let a = "fn3中的变量a";
  function fn4() {
    console.log(a);
  }
  fn4();
}
fn3(); // fn3中的变量a
5. 一些注意问题
  • 闭包的声明周期
    (1)闭包在外部函数调用时产生,外部函数每次调用都会产生一个全新的闭包
    (2)在内部函数丢失时销毁(内部函数被垃圾回收了,闭包才会消失)
  • 注意事项
    闭包主要用来隐藏一些不希望被外部访问的内容,这就意味着闭包需要占用一定的内存空间
    相较于类来说,闭包比较浪费内存空间(类可以使用原型而闭包不能)
    需要执行次数较少时,才使用闭包;需要大量创建实例,实用类
function outer() {
  let someVariable = "someValue";
  return function(){ // 匿名函数返回
    console.log(someVariable);
  }
}
// 调用函数,产生闭包
outer();

function outer2() {
  let num = 0;
  return () => {
    num++;
    console.log(num);
  }
}
let fn1 = outer2(); // 独立闭包
let fn2 = outer2(); // 独立闭包
fn1(); // 1
fn2(); // 1
// 函数被回收,闭包销毁
fn1 = null;
fn2 = null;

标签:闭包,function,函数,JavaScript,笔记,num,let,fn2
From: https://www.cnblogs.com/zibocoder/p/17066139.html

相关文章

  • 杨表学习笔记
    杨表学习笔记简介杨表(Youngtableau)是一种常用于表示论和舒伯特演算中的组合对象,在数学中被用于对称群和一般线性群的研究。阿尔弗雷德·杨(AlfredYoung)于1900年提出了......
  • JavaScript: div,textarea set or get value
    <!doctypehtml><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,u......
  • tunning book 学习笔记
    目录1.所选优化器的所有超参数2.批量大小(batchsize)batchnormvsLayerNormgithub网站:https://github.com/google-research/tuning_playbook调参时需要考虑的内容:1.......
  • python入门学习笔记002--趣学Python算法--第2例兔子产子
    例题如下:有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少?  个......
  • Splay 学习笔记
    二叉查找树一定是一颗二叉树左子树任意节点的值\(<\)当前节点的值\(<\)右子树任意节点的值基本思想Splay的基本思想就是越经常访问的节点的深度就越低,也就是说,......
  • 2017 hypernetworks 笔记
    HYPERNETWORKS这篇文章来自谷歌的一篇文章Introduction这篇文章中提出了一种方法:使用一个小网络(hypernetwork),小网络的作用是给一个largernetwork(mainnetwork)来生成权重,这......
  • python入门学习笔记001--趣学Python算法--第一例抓交通肇事犯
    本人是python小白初学者,过年期间实在闲的无聊,偶尔翻到《趣学Python算法100例》这本书,浅浅阅读后感觉写的很不错。本系列案例均取自该书,只分享题目和自己的编的代码,问题分析......
  • ABB 800XA学习笔记67:硬件组态1
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记67:硬件组态1_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我再记录一遍,以免丢失现在进入第六章的学习,总共26......
  • 学习笔记——CentOS中的时间日期类命令;用户管理类命令(useradd,passwd ,id,su ,userdel,who
    2023-01-24一、CentOS中的时间日期类命令1、date显示当前时间(1)date (功能描述:显示当前时间)(2)date+%Y(功能描述:显示当前年份)(3)date+%m(功能描述:显示当前月份)(4)date......
  • 学习笔记——CentOS中的帮助命令;常用快捷键;文件目录类命令
    2023-01-24一、帮助命令1、基本语法man[命令或配置文件] 功能描述:获得帮助信息2、显示说明(1)NAME:命令的名称和单行描述(2)SYNOPSIS:怎样使用命令(3)DESCRIPTION:命令功能......