포 루프에서 addeventlistener 쓰면 문제가 생긴다는데 죄다 스코프 얘기만 하지 그게 왜 문제인지는 말을 안하고 있다.
(티스토리 다음검색 밴 대응 이미지 처리 완료)
논리적으로 이것밖에 말이 안된다. 예시들 여러개 봤는데 위와 같은 현상 재현 코드에서 분명 버튼 5개는 숫자 0~4까지 제대로 표시되어 만들어졌다. 이걸 보면 for 루프 내부에 대놓고 쓰인 i는 무조건 제대로 적용된다.
근데 버튼 누를시 작동 펑션 내부의 {i사용 어쩌구}를 사용한 출력문은 5가 나온다. 당연하지 for 이터레이션 시작 전 검사 직전에 4에서 1을 더해서 최종 정지값은 5니깐.
근데 모든 버튼이 눌러도 5가 나온다는건 포 루프 내부의 함수의 i를 써 둔건. 즉 {i사용 어쩌구}는 {i의 포인터를 사용한 어쩌구}로 처리되는게 논리적인 답이다.
이건 내가 포 루프 다 돌고 나서 i를 100으로 대입해서 확인했다.
아니 그럼 설명을 문제의 원인이 함수 내부 포인터 사용이라고 해야지 스코프라고 하면 알아듣나. 그래서 글로벌 스코프면 어쨌는데 그거로는 문제없는거 아닌가.
해결 방안은 지역변수나 클로저나 parent에 이벤트 한개 걸어놓고 클릭 구분하기 쓰라는데 클로저는 뭔지 아직 모르겠고 지역변수도 그거 쓰면 왜 해결되는지 아직 모르겠다.
더 봐야할듯.
'개발일지' 카테고리의 다른 글
버블링 이벤트와 캡쳐링 (0) | 2022.06.25 |
---|---|
addeventlistener for loop 문제2 (0) | 2022.06.24 |
테스트3 v4 (robots 금지 처리 완료) (0) | 2022.06.24 |
버튼 클래스 추가 문제 (0) | 2022.06.24 |
스크립트 무조건 나중으로 빼야하는 이유 (0) | 2022.06.24 |