首页 > 编程语言 >JavaScript中的匿名函数和箭头函数

JavaScript中的匿名函数和箭头函数

时间:2024-08-10 12:27:24浏览次数:9  
标签:const 函数 JavaScript window 匿名 console fn log

        在JavaScript学习过程中总会遇到匿名函数,箭头函数,每次似乎都是稀里糊涂地就过去了,今天整理一下相关的知识点。

匿名函数

匿名函数与具名函数相对,分为两种表达形式,函数表达式和立即执行函数

1.函数表达式
        let fn = function () {
            console.log("aa")
        }
        fn()

        let fn2 = function (x, y) {
            console.log(x + y)
            return x + y
        }

        console.log(fn2(1, 2))
        console.log(fn2())

 第一个函数fn(),不需要形参,因此可以直接调用,此时控制台会打印出aa的字样。

第二个函数fn2(),会接受两个参数,并且返回两者的和,但console.log(fn2(1, 2))语句打印出的依旧是该函数体,如下所示:

 ƒ (x, y) {
            console.log(x + y)
            return x + y
        }

 另外两个语句因为没有传入匹配的形参,会输出NaN。

并且注意,对于这种形式的匿名函数类似于变量,要先声明后使用。

2.立即执行函数 

 立即执行函数是做大模块时为了避免变量的相互污染。

语法形式:(function(){})()

其中黄色括号实际上是在调用红色括号内的函数,里面放置实参;黑色小括号放置形参。

        (function () {
            let num = 2
            console.log(num)
        })();
        (function () {
            let num = 3
            console.log(num)
        })();

 分号(必须的)实现两个函数中对于num赋值的分割,防止变量污染。

另一种写法是(function(){}())

箭头函数

1.基本语法

用更简短的函数写法并且不用绑定this,适用于本身需要匿名函数的场景

        const fun = function () {
            console.log('111')
        }
        fun()

        const fun0 = () => {
            console.log('222')
        }
        fun0()

        const fun1 = (x) => {
            console.log(x)
        }
        fun1(1)

        // 只有一个参数时 小括号可以省略,但没有参数时 小括号也不能省略
        const fun2 = x => {
            console.log(x)
        }
        fun2(1)

        // 函数内部逻辑只有一行时 大括号可以省略

        const fun3 = (x) => console.log(x)
        fun3(1)

        // 函数内部逻辑只有一行且是return语句时,不用写return,直接写返回表达式
        const fun4 = x => x + x
        console.log(fun4(1))

        const fun5 = x => {
            return x + x
        }
        console.log(fun5(1))

        // 函数返回对象时,为避免混淆,小括号不再省略

        const fun6 = name => ({ m_name: name })
        console.log(fun6('aaa').m_name)
2.函数参数

箭头函数与普通函数相比较而言

普通函数有动态参数arguments

但箭头函数没有动态参数arguments,但是有剩余参数  ...args

例如场景:定义一个求和函数,其中参数至少有两个

    const getSum = (num1, num2, ...args) => {
            let sum = num1 + num2
            for (let i = 0; i < args.length; i++) {
                sum += args[i]
            }
            return sum
        }

        console.log(getSum(1, 2, 3, 4, 5))   //15
3.this指向
        function fn() {
            console.log(this)
        }
        fn()

控制台输出window对象,是因为在函数方法中this指向window,其中调用语句fn()也等效于window.fn(),也即window调用了fn()函数

情况一:

但在箭头函数中不会创建自己的this,只会从自己的作用链的上一层去沿用this

        const fn = () => {
            console.log(this)
        }
        fn()

控制台同样输出window对象,但并不是因为window调用了函数,而是本层的局部作用域中并不会创建自己的this,借用作用链的上一层(也即<script></script>大括号包裹的作用域中)的this(即window对象)

 情况二:

对象方法调用

        const obj = {
            name: 'aa',
            sayHello: () => {
                console.log(this)   //window
            }
        }
       // this指向window
        obj.sayHello()  

        const obj = {
            name: 'aa',
            sayHello: function () {
                let i = 0
                const count = () => {
                    console.log(this)    //obj
                }
                count()
            }
        }
        obj.sayHello()

标签:const,函数,JavaScript,window,匿名,console,fn,log
From: https://blog.csdn.net/2301_80482040/article/details/141020791

相关文章

  • 回溯函数(算法)杂谈 -----可主动控制撤回逻辑处理的递归函数
    概述回溯,对接触了算法的人而言,并不陌生,其实严谨地说回溯函数就是递归函数,只不过在使用上,人们将它的一些细节抽离出来,进而演化出了所谓的回溯,在算法导论中,与其相关的被称为“回溯搜索算法”。回溯本质是递归的副产物,只要有递归调用就会有回溯。回溯法也经常和二叉树或N叉树......
  • C语言问答进阶--2、C语言简介及基本的输入输出函数
    C语言简介Q:您好,能大体介绍下C语言吗?A:当然可以。C语言是一种计算机语言,它主要被用在系统编程里,可以说,C语言的产生就和操作系统的编写密不可分。【C语言简要历史】1978年由美国电话电报公司(AT&T)的贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie合著了著......
  • 指针数组、回调函数
    指针+二维字符型数组char s[][10]={"hello","world","china"};        char(*p)[10]=s;  //p指向二维数组s ----- *(*(p+i)+j) <=> s[i][j]        char[10] s[3];  //此时二维数组的元素是一个一维数组,定义了一个存放字......
  • 指针、字符串函数
    (一)指针操作一维字符型数组const关键字(只读)eg:(1)int *p;  //基类型(目标类型)(2)int a= 10;   ①const int *p=&a;  //const限定是基类型,表示不能通过*p的方式修改基类型的数据   ②int const *p=&a;  //与①等价     ......
  • 在 SQL 中,怎样使用聚合函数(如 SUM、AVG、COUNT 等)来计算数据的总和、平均值和数量?
    在SQL中,可以使用聚合函数来计算数据的总和、平均值和数量。以下是一些常用的聚合函数的示例:SUM函数:计算指定列的总和。SELECTSUM(column_name)FROMtable_name;AVG函数:计算指定列的平均值。SELECTAVG(column_name)FROMtable_name;COUNT函数:计算指定列的数......
  • 前端黑科技:使用 JavaScript 实现网页扫码功能
    在数字化时代,二维码已经渗透到我们生活的方方面面。从移动支付到产品溯源,二维码凭借其便捷性和高效性,成为了信息传递的重要载体。而随着前端技术的不断发展,我们甚至可以使用JavaScript在网页端实现二维码扫描功能,为用户提供更加便捷的操作体验。本文将带您深入了解如何使用Jav......
  • 每天深解一个字符串类函数之strcat函数
    目录前言:一、引用头文件二、strcat函数的作用三、理解strcat函数的定义1、返回类型2、参数四、使用strcat函数1、编写代码2、调试运行控制台监视器五、注意要点六、模拟实现前言:每天深入了解一个字符串类函数今天我们要学习的是strcat函数,一个追加字符串......
  • 60个“特征工程”计算函数(Python代码)
    近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学者的有效操作。特征工程的问题往往需要具体问题具体分析,当然也有一些暴力的策略,可以在竞赛初赛前期可以带来较大提升,而很多竞赛往往依赖这些信息就可以拿到非常好的效果,剩余的则需要结合业务逻辑以及很多其他的......
  • 远程桌面连接时“发生身份验证错误。要求的函数不受支持”
    问题:连接远程桌面时提示“身份验证错误,要求的函数不受支持”解决方法:一、修改注册表1、WIN+R,然后运行regedit命令2、找到路径:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System3、然后在System文件夹内创建文件夹:\CredSSP\Parameters......
  • 软件设计:整合独立函数到工具类与通用类的权衡
    在面向对象编程中,经常会面临是否应该将独立函数整合进工具类或通用类的决策。这个问题涉及到代码组织、维护性以及可扩展性等多个方面。通过将相关的独立函数组织在一起,我们可以提高代码的可读性和可维护性,但同时也可能带来一些潜在的设计挑战。本文旨在探讨在软件设计中整......