闭包

作者: 写代码的女孩最可爱 | 来源:发表于2018-09-21 13:23 被阅读0次

    1.什么是闭包?
    是说函数变量可以被隐藏于作用域链之内,看起来像是函数将变量包裹了起来;
    先来看两个例子:

    var scope = "global";
    function checkscope(){
       var scope = "local";
      function f(){
        return scope; 
      }
      return f();
    }
    checkscope()         // "local"
    
    

    根据作用域链的相关知识,上面的输出结果不难理解,再看一下变体

    var scope = "global";
    function checkscope(){
       var scope = "local";
      function f(){
        return scope; 
      }
      return f;
    }
    checkscope()()         // "global"
    

    输出结果是不是匪夷所思,闭包也太强大了,但是我还有没有搞清楚什么时候使用他

    2.闭包的作用?
    闭包可以捕捉到局部变量和参数,并且将它一直保存下来(闭包的特性);闭包可以捕捉到单个函数调用的局部变量,并将这些局部变量用作私有状态。
    3.闭包的坏处?
    容易造成内存泄漏
    4.面试题

    for(var i=0;i <=5;i++){
        setTimeout(function timer(){
            console.log(i)
        },1000);    
    }
    

    问:以上代码是否能依次返回0 1 2 3 4 5,如果不能请修改代码?
    上述代码的返回值是6,且每1000毫秒返回一个6;

    for(var i=0;i <=5;i++){
    (function (i){
        setTimeout(function timer(){
            console.log(i)
        },1000)})(i);   
    }
    

    其次,ES6中的let关键字可以实现块级作用域

    for (let i = 1; i <= 5; i++) {
    
      setTimeout( function timer() {
    
          console.log(i);
    
      }, 1000 );
    
    }
    

    相关文章

      网友评论

          本文标题:闭包

          本文链接:https://www.haomeiwen.com/subject/rignnftx.html