【前端入门】实用的高阶函数、闭包知识

126 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

  • 实用的高阶函数
  • 闭包是什么?

实用的高阶函数

Array对象还提供了很多非常实用的高阶函数

  • every()方法可以判断数组的所有元素是否满足测试条件
  • find()方法用于查找符合条件的第一个元素,如果找到了,返回这个元素,否则,返回undefined
  • findIndex()find()类似,也是查找符合条件的第一个元素,不同之处在于findIndex()会返回这个元素的索引,如果没有找到,返回-1
  • forEach()map()类似,它也把每个元素依次作用于传入的函数,但不会返回新的数组。forEach()常用于遍历数组,因此,传入的函数不需要返回值

闭包是什么?

要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。JS语言的特殊之处,就在于函数内部可以直接读取全局变量。

一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。

闭包让你可以在一个内层函数中访问到其外层函数的作用域。当一个函数返回了一个函数后,其内部的局部变量还被新函数引用。在JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。

function count() {
    var arr = [];
    for (var i=1; i<=3; i++) {
        arr.push((function (n) {
            return function () {
                return n * n;
            }
        })(i));
    }
    return arr;
}

var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];

f1(); // 1
f2(); // 4
f3(); // 9

返回闭包时,要注意:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

最后

以上习题&笔记从大佬们的论坛学习而来,特感谢大佬们的知识分享~ (学习技术知识,果然要看大佬们的技术博客,大家有好的推荐也欢迎指引我这个小白哈,感恩!)

附上学习链接,感谢这些大佬出题和解答:

www.liaoxuefeng.com/wiki/102291…

wangdoc.com/javascript/…

developer.mozilla.org