iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >在JavaScript函数中什么是闭包
  • 433
分享到

在JavaScript函数中什么是闭包

2024-04-02 19:04:59 433人浏览 八月长安
摘要

本篇内容介绍了“在javascript函数中什么是闭包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!匿名函

本篇内容介绍了“在javascript函数中什么是闭包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

匿名函数和IIFE不是闭包

文章开始前,我先阐明不会涉及的内容。在es6之前的时代,闭包的常见用例是用于模仿私有方法的匿名函数/  IIFE(立即调用函数表达式),这些方法不是JavaScript所特有的。

通过在ES6中引入let 、const的引入和以及模块,很大程度上解决了var  的局限性所导致的这种情况和其他类似的用例。IIFE包括闭包,但不是闭包。

匿名函数也不是闭包。

anonymousFunc !== closure&& IIFE !== closure // true

学习这些用例很重要。如果你理解过去使用闭包的方式,就能理解现在如何使用闭包。

更别说还有许多ES5遗留代码。但是这不是今天要讲述的内容。既然已经说明,那一起来深入了解吧。

闭包的概念

在计算机科学中,闭包是一个有自己环境的函数,并且在该环境中至少有一个变量。MDN指出:

“在JavaScript中,每当创建一个函数,闭包便产生。”

因此,函数和闭包是紧密联系的。每创建一个函数,都在构建一个闭包,这意味着你可能一直在创建它们,只是自己没有意识到而已。MDN继续指出:

“闭包是将函数与其引用的周边状态绑定在一起形成(封装)的组合”,这将我们带到了作用域。

它与作用域有什么关系?

从前面的引用中更加深入地去探究周围状态这个术语。在JavaScript函数中,周围状态称为作用域。

创建js文件时,环境就是程序的全局作用域。创建函数时,它有自己的作用域。

可以把全局作用域视为国家。一个国家有许多城市,每个城市都封闭在自己的边界线内。同样地,在程序的特定部分中,我们会发现包含在局部作用域内的对象。

Javascript有两个局部作用域:函数作用域和块级作用域。

functionencourage() {  const positivity ='You Got this!'; } //  positivity has function scope {  const negativity ='I don't got this.'; } //  negativity has block scope

函数存在于并能访问全局作用域,但是在函数内声明的任何内容仅存在于并只能访问函数作用域,而非全局作用域。

同样地,如果在代码的任何位置用大括号括起一个变量,那么该变量也将被封闭,属于块级作用域。

闭包和作用域

将闭包视为封闭函数的传感门可能更容易理解。例如,创建新函数时,该函数的闭包到处查看并记下它的环境,即作用域。

function highestBoxOffice() {    const context = “The highest grossingmovie of all time is “;       return context + “Avengers:Endgame”; }

即使函数没有子函数,它仍然有闭包。闭包并不仅存在于嵌套函数中。在变量context的案例中,该函数的闭包到处察看并发现其中存在变量。

嵌套函数中的闭包

如果创建一个嵌套函数,该函数的闭包发现它所在的父函数的墙壁。父函数的作用域是嵌套函数的外部作用域,包括父函数中的变量。

functionhighestBoxOffice(movies) {    returnfunctiongenreTopGross(genre) {       returnMath.Max(…movies.genre.boxOffice)    } }

这是闭包真正发挥作用的地方。函数  genreTopGross()含有闭包。其闭包向内看,发现其内部作用域,包含returnMath.Max(…movies.genre.boxOffice)。

它也向外看,发现其外部作用域,标志着它在函数highestBoxOffice()中。它还可以查看并访问传递到其父函数的所有参数。现在来传递一个参数。

functionhighestBoxOffice(movies) {    returnfunctiongenreTopGross(genre) {       returnMath.Max(…movies[genre].boxOffice)    } } const topGrossing =highestBoxOffice(domesticMoviesObj)

如你所见,已经声明了一个新变量topGrossing()并且赋予它highestBoxOffice(domesticMoviesObj)的值。

目前,topGrossing是未定义的,但是现在采取下一步:

functionhighestBoxOffice(movies) {    returnfunctiongenreTopGross(genre) {       returnMath.Max(…movies[genre].boxOffice)    } } const topGrossing =highestBoxOffice(domesticMoviesObj) topGrossing("Romantic  Comedy")// "Pretty Woman"

引用topGrossing(),并将“Romantic Comedy”作为参数进行传递。现在闭包的用处展现出来了!

.  genreTopGross()函数的内部作用域需要movies参数,该参数位于domesticMoviesObj参数的外部作用域,需要通过闭包来进入。

这使代码成功执行并返回正在寻找的值。

闭包和作用域链

在JavaScript中,每个变量在首次创建时,都属于一个特定的词法作用域。

在书面程序内,每个变量的作用域都通过作用域链连接起来,全局作用域总是位于该链的顶端。

JavaScript编译器遍历这条链。然而,该编译器就像汽车,仅逆向运行,从不正向运行。

使用变量时,编译器返回到作用域链,直到找出该变量的入口。

因此,genreTopGross()函数使用movies变量时,JavaScript没有在genreTopGross()作用域中发现  movies。所以,JavaScript沿着在作用域链中向上移动,直到找到传递到highestBoxOffice()的movies。

这与闭包有什么关系呢?

闭包只提供从内部到外部作用域的访问,而不能提供从外部到内部作用域的访问。

因此,如果在几个嵌套函数中声明并定义一个变量,却在父函数的外部作用域中使用,编译器将返回一个未定义的错误。记住,汽车只会逆向行驶。

“在JavaScript函数中什么是闭包”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 在JavaScript函数中什么是闭包

本文链接: https://www.lsjlt.com/news/85192.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在JavaScript函数中什么是闭包
    本篇内容介绍了“在JavaScript函数中什么是闭包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!匿名函...
    99+
    2024-04-02
  • JavaScript中什么是闭包
    这篇文章给大家介绍JavaScript中什么是闭包,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 一 、词法定义域 LexicalClosure闭包是编程语言Lexical ...
    99+
    2024-04-02
  • JavaScript闭包是什么
    这篇文章给大家分享的是有关JavaScript闭包是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概论在讨论ECMAScript闭包之前,先来介绍下函数式编程(与ECMA-2...
    99+
    2024-04-02
  • 什么是JavaScript闭包
    本篇内容主要讲解“什么是JavaScript闭包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是JavaScript闭包”吧!什么是闭包简言之,闭包是由函数...
    99+
    2024-04-02
  • JavaScript 函数闭包的含义和作用是什么
    这篇文章主要讲解了“JavaScript 函数闭包的含义和作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript 函数闭包的含义和作用...
    99+
    2024-04-02
  • javascript中什么指的是闭包
    这篇文章主要为大家展示了“javascript中什么指的是闭包”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript中什么指的是闭包”这篇文章吧。 ...
    99+
    2024-04-02
  • php中闭包函数的作用是什么
    这篇文章给大家分享的是有关php中闭包函数的作用是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是闭包函数:在子函数内部使用通过use关键字使用父函数的变量,这种方式就是闭包函数格式:function&n...
    99+
    2023-06-15
  • JavaScript 函数的闭包是怎样的
    JavaScript 函数的闭包是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 前言我们知道,作用域链查找标识符的顺序是从当前作用域开始一级一级往上查找。...
    99+
    2023-06-16
  • 怎么理解JavaScript闭包函数
    本篇内容介绍了“怎么理解JavaScript闭包函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!变量作用域要理解JavaScript闭包,...
    99+
    2023-06-25
  • JavaScript闭包是什么意思
    本篇内容介绍了“JavaScript闭包是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!闭包是纯函数式编程语言的传统特性之一。通过将...
    99+
    2023-06-20
  • 在javascript中闭包是不是作用域
    本篇内容介绍了“在javascript中闭包是不是作用域”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • JavaScript 闭包与高阶函数是怎样的
    JavaScript 闭包与高阶函数是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。「JavaScript 中,函数是一等公民」,在各种...
    99+
    2024-04-02
  • javascript的闭包是什么意思
    这篇文章将为大家详细讲解有关javascript的闭包是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在javascript中,当两...
    99+
    2024-04-02
  • JavaScript中闭包有什么用
    这篇文章主要介绍JavaScript中闭包有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 什么是闭包闭包:函数本身和该函数声明时所处的环境状态的组合。也就是说函数不在其定义的环境中被调用,也能访问定义时所...
    99+
    2023-06-25
  • 闭包在js中是什么意思
    这篇文章跟大家分析一下“闭包在js中是什么意思”。内容详细易懂,对“闭包在js中是什么意思”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“闭包在js中是什么意思”的知识吧。什么是闭...
    99+
    2023-06-29
  • Javascript闭包的特性是什么
    本篇内容介绍了“Javascript闭包的特性是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java...
    99+
    2024-04-02
  • Javascript闭包的作用是什么
    本篇内容主要讲解“Javascript闭包的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript闭包的作用是什么”吧!对于初学者来说,理...
    99+
    2024-04-02
  • JavaScript闭包是什么及怎么用
    这篇“JavaScript闭包是什么及怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript闭包是什么及怎...
    99+
    2023-07-04
  • JavaScript函数闭包实例讲解
    这篇文章主要讲解了“JavaScript函数闭包实例讲解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript函数闭包实例讲解”吧!首先让我们来...
    99+
    2024-04-02
  • JavaScript中闭包的实现原理是什么
    这篇文章将为大家详细讲解有关JavaScript中闭包的实现原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是闭包,为什么要用它?闭包是指有权访问另一个函数作...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作