> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 클로저 및 jQuery를 사용하여 루프에서 외부 변수에 올바르게 액세스하는 방법은 무엇입니까?

JavaScript 클로저 및 jQuery를 사용하여 루프에서 외부 변수에 올바르게 액세스하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-20 08:57:02
원래의
808명이 탐색했습니다.

How to Access External Variables Correctly in Loops Using JavaScript Closures and jQuery?

JavaScript 클로저를 통해 루프의 외부 변수에 액세스

JavaScript에서는 클로저와 루프 내에서 변수를 조작하는 것이 어려울 수 있습니다. 이 문서에서는 루프의 변수에 액세스하면 변수 범위로 인해 예기치 않은 값이 발생하는 일반적인 문제를 다룹니다.

다음 코드 조각을 고려하세요.

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

다음 코드 조각을 고려하세요. 루프에서 경고 기능은 항상 배열의 마지막 항목 ID를 표시합니다. 이는 반복할 때마다 변수 항목이 변경되고 클릭 이벤트가 발생할 때 마지막 요소를 참조하기 때문에 발생합니다.

이 문제를 해결하려면 클로저를 활용하면 됩니다. 클로저는 다른 함수를 반환하는 함수이며 변수에 대한 지역화된 범위를 만드는 데 자주 사용됩니다. 코드를 수정하면 클로저 내에 변수 항목을 캡슐화할 수 있습니다.

<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() 도우미 함수를 활용하여 반복 및 변수 범위 지정 프로세스를 단순화할 수 있습니다. :

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

이 경우 항목이 함수에 매개변수로 전달되어 적절한 범위를 보장하고 초기 문제를 해결합니다.

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

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿