关于闭包,今天在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。
对照概念和代码,从这两点去理解闭包,觉着豁然开朗。当然这只是理解层面上的,具体闭包的用处很宽泛,以后再补充闭包的巧妙使用。
原标题:闭包的一个小栗子
关键词: