JavaScript基础——匿名函数

匿名函数简介

立即执行的匿名函数

作为回调函数

闭包


匿名函数简介

在平时我们定义函数时,一般会用function 函数名(){}的形式,这种形式定义的函数称为具名函数,也就是说这种函数有具体的函数名。

定义一个sayHello函数,这个函数的函数名就是sayHello,调用函数写作sayHello()。

javascript 复制代码
        // 1.有名字的函数(具名)
        function sayHello() {
            console.log('hello');
        }
        sayHello();

如果直接使用不带名称的函数,会报错SyntaxError: Function statements require a function name,因为函数必须要有名称。

如果不想定义名称,又想使用函数,应该使用匿名函数

在JavaScript中,提出了一种没有函数名称、不与任何标识符关联的函数,这种函数也叫做匿名函数。

函数只有调用了才能使用,而匿名函数没有名称,不能通过名称来调用,需要配合符号"+"、"-"、"()"等使用。

借助符号"+"、"-",使用函数,并用在函数后方使用()调用函数,注意匿名函数需要写分隔符";"

代码如下:

javascript 复制代码
        +function () {
            console.log('hello1');
        };

        // 匿名函数要加分割符号;
        -function () {
            console.log('hello2');
        };

立即执行的匿名函数

匿名函数还可以作为立即执行函数,在匿名函数后面直接使用()调用的函数,也就是自己执行函数代码块,这种函数就是立即执行函数,常用于避免污染全局命名空间,语法如下:

javascript 复制代码
        ; (function () { }())

定义一个立即执行的匿名函数,利用()符号定义匿名函数并加上分割符号,;(function(){}),在函数代码块后面使用()调用函数,写作;(function(){}()),输出hello world。

javascript 复制代码
        // 常见匿名函数 (这些直接调用的函数,叫做立即执行函数)
        ; (function () {
            console.log('hello world');
        }())

作为回调函数

在需要传递函数作为参数的情况下(使用定时器函数),使用匿名函数作为回调函数,代码如下:

javascript 复制代码
setTimeout(function() {
  console.log('Hello after 1 second!');
}, 1000);

闭包

匿名函数经常与闭包一起使用,以保持局部变量的作用域。

定义一个函数返回一个匿名函数,这样的形式就是一个闭包,匿名函数可以访问函数作用域的变量。

javascript 复制代码
        function createClosure() {
            var secret = 'I am a secret!';
            return function () {
                console.log(secret);
            };
        }
        var myClosure = createClosure();
        myClosure();
相关推荐
忆~遂愿13 分钟前
GE 引擎进阶:依赖图的原子性管理与异构算子协作调度
java·开发语言·人工智能
沐知全栈开发18 分钟前
API 类别 - 交互
开发语言
人道领域38 分钟前
SSM框架从入门到入土(AOP面向切面编程)
java·开发语言
铅笔侠_小龙虾39 分钟前
Flutter 实战: 计算器
开发语言·javascript·flutter
2的n次方_1 小时前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
大模型玩家七七1 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
2501_944711431 小时前
JS 对象遍历全解析
开发语言·前端·javascript
凡人叶枫2 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
Tony Bai2 小时前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
发现一只大呆瓜2 小时前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试