[javascript] closure

Published: by Creative Commons Licence

클로저

함수 안에서 정의되어 유효범위가 끝난 변수나 함수가 유효범위 밖에서 생존하는 특성
일반적으로 자바스크립트의 유효범위는 함수내로 제한이 있다.

function fn() {
  var a = 1;
  console.log('a: ', a);
}
fn();
console.log(typeof a); // undefined

a가 클로저 스코프에 해당하는 변수이다.
agetInnerFunction() 함수 안에 있는 변수이므로 해당 함수가 실행되고 난 이후에는 사라지는게 맞지만
리턴된 inner() 함수가 참조를 하고 있으므로 b가 실행되었을때도 살아있게 된다.

function getInnerFunction(){
  var a = 'Still alive';
  function inner(){
    console.log(a);
  }
  return inner;
}
var b = getInnerFunction(); // inner = function inner(){console.log(a)} = Strill alive
b(); // Still alive