对高阶函数与闭包的理解

1.高阶函数

高阶函数是对其他函数进行操作的函数,它接收函数作为参数或者将函数作为返回值输出。

  // 接收函数作为参数
    function fn(callback) {
    
    
        callback && callback();
    }
    var foo = ()=>{
    
    
        alert('hello world')
    }
    fn(foo)
 // 将函数作为返回值,既是高阶函数又运用了闭包
 // 内部访问到外部,然后把内部的值返回出去,外部在调用时就可以访问到
 // outer()是调用里面的inner这个函数,再次()就是inner调用其内部
    function outer() {
    
    
        var num = 1;
        function inner() {
    
    
            var n = 2;
            alert(n + num);
        }
        return inner;
    }
    outer()()

2.闭包

闭包:内部作用域可以访问外部作用域中的变量,延长了作用域的范围
缺点:消耗内存

 // 打印1,2,3,4,也可以把var改为let
 // 不使用闭包打印4个4
   for (var i = 0; i <= 3; i++) {
    
    
       (function (i) {
    
    
           setTimeout(() => {
    
    
               console.log(i);
           }, i * 1000);
       })(i);
   }
//将函数作为返回值,此处也用了闭包
function outer() {
    
    
    var num = 1;
    return function inner() {
    
    
      var n = 2;
      alert(n + num);
    }
 }
 outer()()

猜你喜欢

转载自blog.csdn.net/m0_48076809/article/details/108804919