闭包、setTimeout

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 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zock阅读 1,089评论 2 6
  • 1. 什么是闭包? 有什么作用 在一个函数中(父函数)return出另一个函数(子函数),该子函数访问了父函数中的...
    candy252324阅读 803评论 0 1
  • 问题 一、什么是闭包? 有什么作用? 1.什么是闭包①JavaScript高级程序设计第三版定义闭包是指有权访问另...
    鸿鹄飞天阅读 501评论 0 0
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zouCode阅读 1,295评论 0 13
  • 生病两个星期了,一直在宿舍,吃药,睡觉,大概我很不喜欢张扬,所以没人知道我生病了,一直想写作,但是我总是觉得思路不...
    阿独阅读 293评论 2 3