for 루프 내에 다른 함수가있는 간단한 함수가 있습니다. main 함수는 sub 함수를 반환합니다. main 함수가 호출되면 루프가 실행되지만 아직 호출되지 않았으므로 하위 함수는 아직 실행되지 않습니다. 루프가 실행 된 후 sub 함수가 호출되므로 i
값은 배열의 마지막 요소 값을 가리 킵니다. 이 배열의 각 값에 대한 새로운 바인딩을 원한다면 어떻게 수정합니까?자바 스크립트에서 루프 내부 클로저
function getName() {
const arr = ['a', 'b', 'c', 'd'];
for (let i = 0; i < arr.length; i++) {
function sendName() {
alert(arr[i]);
}
}
return sendName;
}
var receiveName = getName();
receiveName();
당신이 묻는 것은 말이되지 않습니다. 나중에 호출 할 함수를 반환하는'getName()'을 한 번 호출합니다. 어떻게 그 단일 호출은 "각각의 값에 대한 새로운 바인딩"을 가질 수 있습니까? 그것은'getName()'의 단일 결과입니다. 어쩌면 일련의 함수를 반환 할 수 있을까요? –
코드가 엄격 모드에서도 작동하지 않습니다. [함수는 블록 범위입니다] (https://stackoverflow.com/a/31461615/1048572). 반환하는'sendName' 변수는 존재하지 않습니다. 큰 문제의 일부인 :'getName()'은 하나의 함수 만 반환합니다. 다른 인덱스를 가리키는 다른 함수를 어떻게 호출 할 것인가? (루프에서 'let'을 사용하기 때문에 실제로 작동하는 부분이다.) – Bergi
[루프 내부의 JavaScript 클로저 - 가능한 간단한 예제] (https : // stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –