>  기사  >  웹 프론트엔드  >  일반적인 클로저 문제에 대한 javascript 솔루션_javascript 기술

일반적인 클로저 문제에 대한 javascript 솔루션_javascript 기술

WBOY
WBOY원래의
2016-05-16 18:42:291082검색


[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

위 코드는 각 div에 이벤트를 추가할 때마다 사용하도록 되어 있습니다. 즉, div를 클릭할 때마다 해당 div의 일련번호가 표시됩니다. 그런데 프로그램을 실행하면 어느 것을 클릭해도 7만 표시되는 것을 알 수 있습니다. 그 이유는 무엇입니까? --이것이 클로저의 문제입니다
js에서는 함수 안에 함수를 정의하면 클로저가 나타나는 것으로 나타났습니다. 이때, 외부 함수가 종료되더라도 외부 함수에 포함된 변수는 내부 함수에서 사용될 수 있다. 그러나 외부 레이어에서 루프가 발생할 때 내부 레이어 함수에서 루프 변수를 사용하면 이 변수의 최종 값이 직접 참조됩니다.
위의 코드가 보여주는 것과 같습니다.
해결 방법.
익명 기능을 사용하면 이 문제를 해결할 수 있습니다. 익명 함수는 실행을 중단합니다. 이 기능을 사용하여 범위를 만들고 변수를 활성화하여 외부 루프 변수를 참조할 수 있습니다.
코드에 표시된 대로:

[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

왜냐하면 내부 함수에 있습니다. 루프 변수가 나타나면 최종 값을 갖게 되므로 익명 함수를 사용하여 범위를 자극합니다. 내부 루프에 들어가기 전에 다른 변수가 루프 변수의 값을 얻습니다. 폐쇄 문제를 다루는 핵심입니다.
다음 예: 현재로서는 명확한 for 루프는 없지만 위의 아이디어에 따르면 문제는 즉시 해결될 수 있습니다.
[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

补充:看到有网友这样解决了问题:

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

我个人的理解是 在进入内层循环之前 把id赋值给f,f在作为内层循环的参数,其思想应该是一样的.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.