>웹 프론트엔드 >JS 튜토리얼 >JavaScript 클로저에서 루프의 외부 변수에 액세스하는 방법은 무엇입니까?

JavaScript 클로저에서 루프의 외부 변수에 액세스하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-20 08:57:31876검색

How to Access Outside Variables in Loops from JavaScript Closures?

JavaScript 클로저에서 루프의 외부 변수에 액세스

루프 내에서 선언된 변수에 액세스할 때, 특히 해당 변수가 나중에 참조될 때 문제가 발생합니다. 비동기 콜백에서. 예시로 다음 코드 조각을 고려해보세요.

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    // ...
}</code>

이 경우 item 변수는 각 루프 반복에 따라 변경됩니다. 나중에 항목을 참조하면 배열의 마지막 항목 값이 유지됩니다.

해결책: 클로저 사용

이 문제에 대한 해결책은 클로저를 사용하는 것입니다. 다른 함수를 반환하는 함수를 생성합니다. 클로저를 사용하면 아래와 같이 항목 변수의 범위를 다르게 지정할 수 있습니다.

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    // ...
    $("#showcasebutton_"+item.id).click(
        (function(item) {
            return function() {
                alert(item.id);
                self.switchto(item.id);
            };
        })(item)
    );
}</code>

대안: jQuery의 $.each() 도우미

jQuery를 사용할 수 있는 경우 , $.each() 도우미는 간단한 for/each 루프의 약어로 사용할 수 있습니다. 함수 호출에서 범위 지정이 작동하는 방식으로 인해 클로저의 필요성이 줄어듭니다.

<code class="javascript">$.each(this.items,function(i, item) {
    // ...
    $("#showcasebutton_"+item.id).click(function() {
        alert(item.id);
        self.switchto(item.id);
    });
});</code>

위 내용은 JavaScript 클로저에서 루프의 외부 변수에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.