热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【JavaScript】27_函数闭包

15、函数创建一个函数,第一次调用时打印1,第二次调用打印2,以此类推可以利用函数,来隐藏不希望被外部访问到的变量闭包


15、函数

创建一个函数,第一次调用时打印1,第二次调用打印2,以此类推

可以利用函数,来隐藏不希望被外部访问到的变量


闭包:

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

什么时候使用:

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

构成闭包的要件:


  1. 函数的嵌套

  2. 内部函数要引用外部函数中的变量

  3. 内部函数要作为返回值返回

<script>
// let num &#61; 0
// function fn(){
// num&#43;&#43;
// console.log(num)
// }
// fn()
function outer(){
let num &#61; 0 // 位于函数作用域中
return () &#61;> {
num&#43;&#43;
console.log(num)
}
}
const newFn &#61; outer()
// console.log(newFn)
newFn()
newFn()
newFn()
script>

函数在作用域&#xff0c;在函数创建时就已经确定的&#xff08;词法作用域&#xff09;

和调用的位置无关

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

<script>
let a &#61; &#39;全局变量a&#39;
function fn(){
console.log(a)
}
function fn2(){
let a &#61; &#39;fn2中的a&#39;
fn()
}
fn2()//因为后来调用了方法fn()&#xff0c;该方法是定义在全局中的&#xff0c;所以调用的是&#39;全局变量a&#39;
function fn3(){
let a &#61; &#39;fn3中的a&#39;
function fn4(){
console.log(a)
}
return fn4;
}
let fn4 &#61; fn3()
fn4()
script>

16、闭包

闭包的生命周期&#xff1a;


  1. 闭包在外部函数调用时产生&#xff0c;外部函数每次调用都会产生一个全新的闭包

  2. 在内部函数丢失时销毁&#xff08;内部函数被垃圾回收了&#xff0c;闭包才会消失&#xff09;

注意事项&#xff1a;

闭包主要用来隐藏一些不希望被外部访问的内容&#xff0c;

这就意味着闭包需要占用一定的内存空间

注意事项&#xff1a;

相较于类来说&#xff0c;闭包比较浪费内存空间&#xff08;类可以使用原型而闭包不能&#xff09;&#xff0c;

需要执行次数较少时&#xff0c;使用闭包

需要大量创建实例时&#xff0c;使用类

<script>
function outer(){
let someVariable &#61; &#39;someValue&#39;
return function(){
console.log(someVariable)
}
}
function outer2(){
let num &#61; 0;
return () &#61;> {
num&#43;&#43;
console.log(num)
}
}
let fn1 &#61; outer2()//独立闭包
let fn2 &#61; outer2()
fn1()
fn2()
fn1 &#61; null
fn2 &#61; null
script>






推荐阅读
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Python基础知识:注释、输出和input交互
    本文介绍了Python基础知识,包括注释的使用、输出函数print的用法以及input函数的交互功能。其中涉及到字符串和整数的类型转换等内容。 ... [详细]
author-avatar
陈佩儒61473
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有