>  기사  >  웹 프론트엔드  >  루프 함수에서 외부 변수에 액세스할 때 클로저 문제를 방지하는 방법은 무엇입니까?

루프 함수에서 외부 변수에 액세스할 때 클로저 문제를 방지하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-20 08:55:30611검색

How to Avoid Closure Issues when Accessing External Variables in Loop Functions?

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

JavaScript에서 루프 내에서 클로저 외부의 변수에 액세스할 때 다음과 같은 문제가 발생할 수 있습니다. 변수의 마지막 값이 일관되게 반환됩니다. 이는 루프가 반복될 때마다 변수가 변경되고 클로저가 최종 값을 캡처하기 때문에 발생합니다.

이 문제를 해결하려면 클로저 기술을 사용하여 루프 내에서 변수의 범위를 지정할 수 있습니다. 다음 클로저는 변수의 범위를 지정하는 다른 함수를 반환하는 함수를 생성합니다.

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"> <img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#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) {
    $("#showcasenav").append("<li id=\"showcasebutton_" + item.id + "\"> <img src=\"/images/showcase/icon-" + item.id + ".png\" /></li>");
    $("#showcasebutton_" + item.id).click(function () {
        alert(item.id);
        self.switchto(item.id);
    });
});</code>

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

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