const nations = ["usa", "china", "japan"];
const ul = document.createElement("ul");
nations.forEach(function (nation) { // (1)
const li = document.createElement("li");
li.innerText = nation;
li.addEventListener("click", function () { // (2)
alert("selected nation is" + nation);
});
ul.appendChild(li);
});
document.body.appendChild(ul);
A:
A:
A:
클로저는 함수가 다른 함수 내부에서 정의되고, 이 내부 함수가 외부 함수의 변수에 접근할 때 발생하는 것이다. 내부 함수가 외부 함수의 LE , 스코프를 유지하고 해당 스코프에 있는 변수를 계속 사용할 수 있게 된다.
만약, 클로저 내부에서 사용하는 변수들이 더이상 필요하지 않게 된다면, 이 변수들은 메모리를 계속 차지하게 되는데, 이런 상황에 GC의 동작이 중요하다.
GC는 사용되지 않는 메모리를 자동 식별하고, 해제하는 역할을 하는데, 메모리 누수 방지 및 메모리 사용 최적화의 역할을 하게 된다.
하지만 만약 클로저가 존재하고, 그 클로저가 외부 스코프에 있는 변수에 접근 하고 있다면, 해당 변수는 GC의 대상이 되지 않는데,
즉, 클로저가 더이상 필요하지 않게 될 때, 클로저 자체 또는, 그 클로저가 참조하는 변수에 닿을 수 없게 되어야 GC에 의해 메모리에서 해제가 된다.
즉, 클로저의 사용 방식 및 수명 체크를 하여, GC가 메모리를 효율적으로 관리할 수 있게 해야 한다.