문제의 코드 사이의 상호 작용에 의해 혼란 :함수 파라미터, 클로저 및 범위 체인
function addLinks() {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function (num) {
return function() {
alert(num);
};
}(i);
document.body.appendChild(link);
}
}
window.onload = addLinks;
내 문제 복귀 함수는 폐쇄되고 가변 num
함수가 num
을 실행할 때마다 전역 변수이기 때문에 이전 값을 현재 값으로 유지해야하며 모든 값을 자동으로 업데이트해야합니다. 그러나 이것은 일어나지 않습니다. 각 링크를 클릭하면 다른 가치를 얻습니다. 왜 이런 일이 일어나는 걸까요?
문제점을 이해하지 못합니다. 콘솔에서'addLinks'의 첫 번째 버전을 실행 한 다음 추가하는 링크를 클릭하면 다른 값이 알려질 때마다 결과가 표시됩니다. 이 예기치 않은 행동이 있습니까? – marekful
@Marcell Fülöp 예기치 않게 num이 전역 변수이고 해당 값이 함수가 실행될 때마다 변경되거나 업데이트되어야합니다. –
@Maizere num은 전역이 아닙니다. 함수 매개 변수를 정의 할 때'var' 키워드가 필요하지 않습니다. 함수에 대해 암시 적으로 지역 변수입니다. – Dennis