[函数式]JavaScript面试问题:函数式编程

[函数式]JavaScript面试问题:函数式编程
文章图片

文章图片

是什么使JavaScript成为函数式语言?
函数式编程是一种编程范式 , 指示了我们构建应用程序的方式 。函数式编程将程序中的函数视为数学函数 。
这意味着我们避免更改状态和创建可变数据 , 它也意味着函数是纯函数 , 也就是说 , 一个函数在相同的输入条件下返回相同的东西 。
函数在函数式编程中也不应该有副作用 , 因为它会使函数不纯 。
JavaScript函数也是一级函数 , 这意味着我们可以用函数作为参数或者函数返回函数 。
它还支持闭包 , 在这里我们返回可以在父函数中使用某些值的函数 。
例如 , JavaScript数组具有 map , filter 和 reduce 方法 , 它们采用回调函数来处理数组中的项 。
map , filter 和 reduce 是高阶函数 , 因为它们接受函数作为参数 , 返回函数的函数也是高阶函数 。
例如 , 可以按如下方式使用 map 方法:const nums = [1,2,3]; const doubleNums = nums.map(x => x*2);
在上面的代码中 , 我们将函数 x => x * 2 传递给 map 。
x => x * 2 执行每个数组项执行指定的计算 , 然后返回具有新值的新数组 , 然后我们得到 doubleNum 为 [2 , 4 , 6] 。
[函数式]JavaScript面试问题:函数式编程
文章图片

文章图片

高阶函数是将函数作为参数或返回函数的函数 。
例如 , 如果我们有:const hoc = (fn)=> fn(); hoc(()=>{console.log('foo'); });
上面的代码具有 hoc 函数 , 该函数接受函数 fn 并运行它 。
然后 , 当我们进行以下调用时:hoc(()=>{console.log('foo'); });
然后 , 由于传入的函数在 hoc 函数中运行 , 因此我们输出了 foo 。
[函数式]JavaScript面试问题:函数式编程
文章图片

文章图片

JavaScript函数是一等对象 , 因为它们像任何其他类型的对象一样被对待 。
这意味着函数可以存储在变量 , 对象或数组中 。它们可以作为参数传递给函数 。同样 , 它们可以从函数中返回 。
例如 , 我们可以将函数分配给变量 , 如下所示:let foo = () => {};
我们为变量 foo 分配了一个箭头函数 。
同样 , 它们可以作为参数传递 , 如下所示:let foo = () => {console.log('foo'); }; let bar = (fn) => fn(); bar(foo);
然后 , 我们可以传入 foo 来调用 bar 。请注意 , 我们只是传入 foo 的引用 , 而没有调用它 。因此 , 在 foo 之后没有括号 。
可以通过以下函数返回它们:let foo = () => {return ()=> console.log('foo') }; foo()();
上面的 foo 函数返回一个输出 'foo' 的函数 。
然后我们像在最后一行中那样调用它 。
JavaScript函数也可以存储在对象和数组中 。例如 , 我们可以这样写:let obj = {foo: () => {console.log("foo");} }; obj.foo();
我们将 foo 函数作为属性放入对象中 , 然后在最后一行中对其进行调用 。
最后 , 我们可以将它们存储在数组中 , 如下所示:const arr = [() => {console.log("foo");} ]; arr[0]();
或者我们可以调用 push 将其放入数组中:const arr = []; arr.push(() => {console.log("foo"); }); arr[0]();
[函数式]JavaScript面试问题:函数式编程
文章图片

文章图片


推荐阅读