美文网首页
闭包、setTimeout

闭包、setTimeout

作者: 疯小儿 | 来源:发表于2017-09-07 22:13 被阅读0次

    1.什么是闭包,闭包的作用是什么?

    • 变量的作用域包括全局变量和局部变量。
      Javascript语言中,函数内部可以直接读取全局变量。然而在函数外部无法读取函数内的局部变量。如何使函数外部读取函数内部的局部变量,在函数f1内部在增加一个函数f2,这样f2对于f1来说就是函数内部,可以访问f1了。此时的f2就是闭包。
    • 闭包是指有权访问另一个函数作用域中的变量的函数。在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
    • 闭包的用途:
      1.可以读取函数内部的变量;
      2.让这些变量的值始终保持在内存中。
    function f1(){
        var n=1;
        nAdd=function(){n+=1}
        function f2(){
          alert(n);
        }
        return f2;
      }
      var result=f1();
     result(); // 1
      nAdd();
      result(); // 2
    
    • 以上这个例子说明函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。这是因为f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。
      参考:学习Javascript闭包
      2.setTimeout 0 有什么作用?
    • setTimeout用来指定某个函数或某段代码,在多少毫秒之后执行。setTimeout()接受两个参数,第一个是回调函数,第二个是推迟执行的毫秒数。
    console.log(1);
    setTimeout(function(){console.log(2);},1000);
    console.log(3);//输出的结果:1 3 2
    

    如果将setTimeout()的第二个参数设为0,就表示当前代码执行完(执行栈清空)以后,立即执行(0毫秒间隔)指定的回调函数。换句话说,就是要等当前脚本的同步任务和“任务队列”中已有的事件,全部处理完以后,立马执行setTimeout()。
    例如:

    setTimeout(function(){console.log(1);}, 0);
    console.log(2);//执行结果总是2,1 
    

    相关文章

      网友评论

          本文标题:闭包、setTimeout

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