]
위 코드는 각 div에 이벤트를 추가할 때마다 사용하도록 되어 있습니다. 즉, div를 클릭할 때마다 해당 div의 일련번호가 표시됩니다. 그런데 프로그램을 실행하면 어느 것을 클릭해도 7만 표시되는 것을 알 수 있습니다. 그 이유는 무엇입니까? --이것이 클로저의 문제입니다
js에서는 함수 안에 함수를 정의하면 클로저가 나타나는 것으로 나타났습니다. 이때, 외부 함수가 종료되더라도 외부 함수에 포함된 변수는 내부 함수에서 사용될 수 있다. 그러나 외부 레이어에서 루프가 발생할 때 내부 레이어 함수에서 루프 변수를 사용하면 이 변수의 최종 값이 직접 참조됩니다.
위의 코드가 보여주는 것과 같습니다.
해결 방법.
익명 기능을 사용하면 이 문제를 해결할 수 있습니다. 익명 함수는 실행을 중단합니다. 이 기능을 사용하여 범위를 만들고 변수를 활성화하여 외부 루프 변수를 참조할 수 있습니다.
코드에 표시된 대로:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]
왜냐하면 내부 함수에 있습니다. 루프 변수가 나타나면 최종 값을 갖게 되므로 익명 함수를 사용하여 범위를 자극합니다. 내부 루프에 들어가기 전에 다른 변수가 루프 변수의 값을 얻습니다. 폐쇄 문제를 다루는 핵심입니다.
[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]
补充:看到有网友这样解决了问题:
我个人的理解是 在进入内层循环之前 把id赋值给f,f在作为内层循环的参数,其思想应该是一样的.