美文网首页
闭包、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

    1.什么是闭包,闭包的作用是什么? 变量的作用域包括全局变量和局部变量。Javascript语言中,函数内部可以直...

  • for循环与setTimeout、事件绑定

    闭包 闭包 = 函数 + 创建该函数的环境 问题 这些问题出现的原因,闭包不是主因,是由于setTimeout和事...

  • js经典题目

    1闭包 链接:学习Javascript闭包(Closure) setTimeout在js单线程中只是放在队列中并未...

  • 闭包与setTimeout

    闭包 闭包的作用: 闭包的本质是一个函数闭包可以访问函数内部变量闭包的存在会使内部变量保留在内存中闭包的应用: 模...

  • Javascript-基本知识(六)

    1. 闭包 1 闭包的作用: 2 setTimeOut和闭包: js本身是单线程。 单线程的局限性:执行多个任务时...

  • 定时器,闭包

    1. 什么是闭包?有什么作用? 2. setTimeout 0 有什么作用? setTimeout的作用是将set...

  • setTimeout函数之循环和闭包

    setTimeout函数之循环和闭包 前言 之前对于setTimeout的一个经典问题的理解总是感到很迷惑,现在好...

  • 《javascript基础补充--this上下文相关机制》

    一、关于this的机制 常用遇到的: 对象、闭包、原型链继承 setTimeout/setInterval 执行指...

  • 闭包和定时器

    setTimeout的语法 更新于2017年4月9号 问题 1.什么是闭包?有什么作用 闭包:一个变量,一个函数(...

  • 一个经典的闭包面试题

    Shut up, show me the code!!! 会用到的两个知识点: 闭包 setTimeout 提示:...

网友评论

      本文标题:闭包、setTimeout

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