iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >JavaScript闭包和匿名函数的关系
  • 873
分享到

JavaScript闭包和匿名函数的关系

2024-04-02 19:04:59 873人浏览 泡泡鱼
摘要

这篇文章主要讲解了“javascript闭包和匿名函数的关系”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript闭包和匿名函数的关系”吧!前面

这篇文章主要讲解了“javascript闭包和匿名函数的关系”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript闭包和匿名函数的关系”吧!

前面讲了一篇在for循环中加setTimeout输出内容,我们用到了一个闭包,但同时也可以说是匿名函数,到底匿名函数和闭包有没有关系呢?【答案是它们之间没有关系】

匿名函数

匿名函数,顾名思义,就是没有名字的函数,与之对应的就是有名字的函数,也叫具名函数。

//匿名函数

function (){

    console.log('匿名函数');

}

//具名函数

function myFn(){

    console.log('具名函数');

}

//变量a就是匿名函数的名字

var a = function(){

    console.log('a就是匿名函数的名字');

}

如果我们直接在控制台中运行匿名函数,会发现报错,无法执行。匿名函数是无法执行的,一般用到匿名函数的时候都是立即执行,也叫自执行匿名函数或者自调用匿名函数,一般人都叫立即执行函数。

立即执行函数

比较常见的立即执行函数如下:

;(function(){

    console.log('caibaojian.com');

})()

;(function(){

    console.log('caibaojian.com');

}());

上面这两种都是典型的立即执行函数写法,两者的区分就是一个执行在匿名函数括号外面,另外一个发起执行的括号在匿名函数里面。比较常见的是第一种写法,括号在匿名函数的括号外面。

步骤分解:

1. 首先声明一个匿名函数 function(){alert('我是匿名函数')}。

2. 然后在匿名函数后面接一对括号 (),调用这个匿名函数。

那为什么还要用一个括号包起来呢?其实是为了兼容js的语法,如果我们不加括号,直接写成

function (){alert('我是匿名函数')}()

浏览器会报语法错误,想要通过浏览器的语法检查,必须加点小东西,比如下面几种

(function(){alert('我是匿名函数')} ()) // 用括号把整个表达式包起来

(function(){alert('我是匿名函数')}) () //用括号把函数包起来

!function(){alert('我是匿名函数')}() // 求反,我们不在意值是多少,只想通过语法检查。

+function(){alert('我是匿名函数')}()

-function(){alert('我是匿名函数')}()

~function(){alert('我是匿名函数')}()

void function(){alert('我是匿名函数')}()

new function(){alert('我是匿名函数')}()

实际上,立即执行函数的作用只有一个:创建一个独立的作用域,在这个作用域里面,外面访问不到,避免变量污染。比如我们前面的一篇文章,setTimeout的第三个参数里面讲到的一道题目。

for(var i=0;i<6;i++){

    setTimeout(function(){

        console.log(i); //为什么输出的总是 6,而不是0,1,2,3,4,5

    },i*1000);

}

我们发现上面这个定时器总是输出6,因为setTimeout里面的执行函数是异步的,执行的时候,i的值是贯穿整个作用域的,而不是单独一个给每个定期器分配了一个i,for运行完的值是6,此时输出就总是6了。

那怎么解决呢?用立即执行函数给每个定时器创造一个独立作用域即可。

for(var i=0;i<6;i++){

    (function(j){

        setTimeout(function(){

            console.log(j);

        },j*1000);

    })(i);  

}

在for循环执行时,立即执行函数就已经有了结果了。而每个立即执行函数里面的j值就是独立的一个,不会受后面影响。所以会分别执行5次定时器。

//第一个立即执行函数

(function(0){

    setTimeout(function(){

        console.log(0);

    })

})(0);

//第二个立即执行函数

(function(1){

    setTimeout(function(){

        console.log(1);

    })

})(1);

//……

//第六个立即执行函数

(function(5){

    setTimeout(function(){

        console.log(5);

    })

})(5);

i 的值从 0 变化到 5,对应 6 个立即执行函数,这 6 个立即执行函数里面的 j 「分别」是 0、1、2、3、4、5。

上面说了这么多关于匿名函数和立即执行函数的,相信你对这两个概念已经很清楚,那么闭包跟匿名函数有关系吗?

闭包

js闭包是指有权访问另一个函数作用域中的变量的函数,个人认为js闭包最大的用处就是防止对全局作用域的污染。闭包最神奇的地方就是能在一个函数外访问函数中的局部变量,把这些变量用闭包的形式放在函数中便能避免污染。

我们可以分离出上面的第一个立即执行函数

function box(i){

    setTimeout(function(){

        console.log(i);

    },i*1000);

}

box(1);

//或者这样

function box(i){

    function inner(){

        console.log(i);

    }

    return inner;

}

var outer = box(1);

outer();

感谢各位的阅读,以上就是“JavaScript闭包和匿名函数的关系”的内容了,经过本文的学习后,相信大家对JavaScript闭包和匿名函数的关系这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: JavaScript闭包和匿名函数的关系

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

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

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

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

下载Word文档
猜你喜欢
  • JavaScript闭包和匿名函数的关系
    这篇文章主要讲解了“JavaScript闭包和匿名函数的关系”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript闭包和匿名函数的关系”吧!前面...
    99+
    2024-04-02
  • javascript之匿名函数和闭包的示例分析
    小编给大家分享一下javascript之匿名函数和闭包的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下匿名函数<script type="te...
    99+
    2024-04-02
  • 匿名函数,内置函数,闭包
    内容 匿名函数:一句话函数,比较简单的函数。 函数名 = lambda 参数 : 返回值 此函数不是没有名字,他是有名字的,他的名字就是你给其设置的变量,比如func。 func() 函数执行 lambda 是定义匿名函数的关...
    99+
    2023-01-31
    函数
  • golang函数闭包和匿名函数之间的区别
    go 语言中的闭包和匿名函数的主要区别在于:闭包可以访问其创建范围之外的变量;匿名函数不能访问其创建范围之外的变量。 Go 语言中函数闭包和匿名函数之间的区别 闭包 闭包是一个函数,它...
    99+
    2024-04-24
    golang 闭包 匿名函数
  • golang匿名函数和闭包的优缺点总结
    匿名函数简洁、匿名,但可读性差、调试困难;闭包能封装数据、管理状态,但可能导致内存消耗和循环引用。实战案例:匿名函数可用于简单数值处理,闭包可实现状态管理。 Go 语言匿名函数和闭包的...
    99+
    2024-05-05
    golang 闭包 作用域
  • 详解golang defer 闭包 匿名函数
    目录defer的触发时机defer,return,返回值的执行顺序闭包与匿名函数defer用于资源的释放,会在函数返回之前进行调用。如果有多个defer表达式,调用顺序类似于栈,越后...
    99+
    2024-04-02
  • Python中的闭包和匿名函数有什么区别
    闭包和匿名函数都是函数的概念,但是它们有一些区别: 闭包是指在一个函数内部定义另一个函数,并且内部函数可以访问外部函数的变量。闭...
    99+
    2024-03-12
    Python
  • golang匿名函数和闭包的最佳实践探索
    在 go 中,匿名函数和闭包是处理函数的强大工具,遵循最佳实践可以提高代码的质量。匿名函数应保持简洁、避免捕获外部变量、使用变量参数。闭包应限制自由变量的捕获、避免修改自由变量,如果捕获...
    99+
    2024-05-02
    golang 闭包 匿名函数
  • PHP 匿名函数和闭包在数据结构中的应用
    匿名函数和闭包在数据结构处理中的应用php 中的匿名函数和闭包可用于处理数组、链表和队列等数据结构。针对数组,匿名函数可用于过滤元素;针对链表,闭包可用于创建节点;针对队列,匿名函数和闭...
    99+
    2024-05-07
    php 闭包
  • golang匿名函数和闭包在Web开发中的应用
    在 go 中,匿名函数和闭包可提高代码的可读性、可重用性和灵活性。匿名函数是无需定义名称的函数,而闭包包含对外部作用域变量的引用。在 web 开发中,我们可以使用匿名函数和闭包创建可重用...
    99+
    2024-05-02
    golang web开发 作用域
  • 【PHP】函数-作用域&可变函数&匿名函数&闭包&常用系统函数
    文章目录 函数定义&使用命名规则参数种类默认值引用传递函数返回值return关键字 作用域global关键字静态变量 可变函数匿名函数闭包常用系统函数输出函数时间函数数学函数与函数相关...
    99+
    2023-08-31
    php 开发语言
  • golang匿名函数及闭包原理解析
    是的,go 中的匿名函数可用于快速定义一次性函数或立即执行函数,而闭包则用于将局部变量封锁在匿名函数中,即使后者返回也能访问这些变量。 Go 中的匿名函数和闭包理解 匿名函数是在不定义...
    99+
    2024-05-03
    函数 golang 闭包
  • golang匿名函数和闭包的开源项目和资源分享
    匿名函数和闭包:匿名函数是无名称的函数,即时创建用于执行特定任务。闭包是在匿名函数中可以访问外部变量的变量。在 go 中,它们使用 func() 语法声明。匿名函数和闭包可用于传递参数、...
    99+
    2024-05-04
    golang 闭包 匿名函数 作用域
  • golang匿名函数和闭包在并发编程中的作用
    在并发编程中,匿名函数和闭包通过创建拥有独立状态的代码块来发挥重要作用。它们用于:1. 创建协程 2. 传递状态 3. 实现并发控制。例如,我们可以使用匿名函数创建 goroutine ...
    99+
    2024-05-03
    golang 并发编程
  • golang匿名函数和闭包的未来发展趋势展望
    匿名函数没有名称,用于创建临时函数,而闭包可以访问其作用域之外的变量,允许函数访问和修改这些变量。匿名函数和闭包广泛应用于排序、计数等场景,未来有望简化语法、优化性能并增强并发支持。 ...
    99+
    2024-05-02
    golang 闭包 作用域
  • golang匿名函数和闭包的常见的陷阱和解决方案
    在 go 语言中使用匿名函数和闭包时需注意以下陷阱:1. 捕获变量引用:使用闭包捕获变量值的副本,而不是引用。2. 串行访问共享数据:通过互斥锁等机制保护共享数据。3. 泄露闭包引用:确...
    99+
    2024-05-05
    闭包 匿名函数 golang 作用域 垃圾回收器 同步机制
  • Go语言函数的匿名函数与闭包用法解析
    Go语言函数的匿名函数与闭包用法解析 在Go语言中,函数是一等公民,可以作为参数传递给其他函数,也可以作为返回值。匿名函数和闭包是函数式编程中常见的概念,在Go语言中也得到了很好的支持...
    99+
    2024-04-02
  • golang匿名函数和闭包的API文档和最佳实践指南
    匿名函数和闭包是 go 语言中的工具,用于创建动态和可重用代码,分别语法为:匿名函数:func(参数列表) 返回值类型 { 函数体 }闭包:func() 返回值类型 { 函数体 捕获变量...
    99+
    2024-05-03
    golang 闭包 字符串数组
  • golang匿名函数与闭包的应用场景解析
    匿名函数和闭包在 go 语言中有着广泛的应用场景,包括:创建状态持久化函数,以便函数可以持续访问和修改此前调用中设置的状态;模拟私有方法,以便方法可以访问结构体的内部状态,但对外部不可见...
    99+
    2024-05-04
    golang 闭包 匿名函数
  • golang匿名函数与闭包之间的异同分析
    异同分析:匿名函数和闭包都是没有名称的函数,可立即调用或分配给变量。不同的是,闭包捕捉外部作用域变量,允许内部函数访问和修改外部变量,而匿名函数则不行。 Go 语言中的匿名函数与闭包的...
    99+
    2024-05-02
    golang 闭包 匿名函数 作用域
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作