某天突然顿悟闭包到底啥意思
在了解闭包之前必须先理解下垃圾回收机制,执行先后文的顺序。
如
function foo() { function bar() { var a = 20; var b = 30; return a + b; } return bar; } var bar = foo(); bar();
在执行上下文顺序时候:
global -> global, foo(foo并没有执行,因此被垃圾回收) -> global -> global bar ->global
闭包情况:
function foo() { var a = 20; var b = 30; function bar() { return a + b; } return bar; } var bar = foo(); bar();
上下文执行顺序:
global -> global, foo ->global, foo, bar(按理说此时foo应该被回收,但是bar要调用foo里的变量,因此foo被留在内存里,这样就形成了个闭包) -> global