你的位置:首页 > Java教程

[Java教程]闭包的一个小栗子


  关于闭包,今天在JavaScript精粹读到的setTimeOut的栗子觉着很不错。随性记下来,写一下自己对闭包的理解。

  谈论闭包,首先要搞清楚概念,个人的理解可以简单归纳为两点。

  1).闭包意味着内层函数可以引用存在于包围他的函数内的变量;(这是核心,其实这也就是JavaScript的函数作用域的知识)

  2).即使外层函数的执行已经终止。(这个是重点,区别于非闭包的函数内部变量引用)

function delay(a,b,time){  setTimeout(function(){    console.log(a + b);  },time)}delay('xxx','yyyy',1000);

  首先声明一个delay函数,setTimeOut()是delay()内部的嵌套函数,但是他可以引用包围他的函数delay内的变量a,b,time。当紧接着去执行delay这个函数,函数执行完毕后的1s,setTimeOut才执行,但是他依然可以引用a,b,time。

  对照概念和代码,从这两点去理解闭包,觉着豁然开朗。当然这只是理解层面上的,具体闭包的用处很宽泛,以后再补充闭包的巧妙使用。