>웹 프론트엔드 >JS 튜토리얼 >JS 클로저의 특성 분석

JS 클로저의 특성 분석

小云云
小云云원래의
2018-03-06 13:55:491691검색

body 태그에 id 노드와 함께 u 태그를 추가하고, ul 태그 아래에 5개의 li 태그가 있습니다. 다른 li 태그를 클릭할 때 li 첨자를 표시하는 방법은 무엇입니까?
1) 먼저 ul 노드를 가져와야 합니다. var node = document.getElementsById('node')
2) 노드 아래에 하위 노드를 가져옵니다. node var list = node.children
**3) 하위에 onclick 이벤트를 추가합니다. 루프의 노드(여기서는 폐쇄 문제가 있음을 참고하세요). for(var i=0;i< list.length; i++){
list[i].onclick = function()console.log(i)}}, 인쇄된 결과에서 출력은 7입니다. 시간. **
4) 출력 분석 7. i는 var를 사용하여 전역 변수로 선언되었으므로 동일한 주소를 가리킵니다. 루프가 실행된 후 i의 값은 7이므로 각 루프에 출력되는 결과는 7입니다.
문제 해결을 위해 두 가지 방법을 사용합니다. 1) 블록 수준 범위 변수를 선언하고 let j = i를 사용하여 매번 수신합니다. 나는 에 전달되었습니다.

let j = i; 
list[i].onclick = function(){console.log(j)}

함수 메서드에서는 블록 수준 변수 j가 호출되며 이 변수는 가비지 수집되지 않습니다. 각 for 루프는 서로 다른 주소를 가리키므로 클릭 이벤트가 트리거되면 해당 첨자가 올바르게 인쇄될 수 있습니다. 2) 문제를 해결하려면 클로저를 사용하세요.

list[i].onclick = function(i){ 
return function(){console.log(i)}。 
}

**클로저의 해석
클로저는 다른 함수의 내부 변수를 읽을 수 있는 함수입니다. JavaScript 언어에서는 함수 내의 하위 함수만 지역 변수를 읽을 수 있습니다. 클로저는 간단히 "함수 내부에 정의된 함수"로 이해될 수 있습니다. 본질적으로 클로저는 함수 내부와 함수 외부를 연결하는 다리입니다.

참고: 클로저를 사용하면 함수의 변수가 메모리에 저장되어 많은 메모리를 소비하게 됩니다. 따라서 클로저를 남용할 수 없으며 이로 인해 웹 페이지에서 성능 문제가 발생하고 IE 브라우저에서 메모리 누수가 발생할 수 있습니다. . . 최종 해결 방법은 함수를 종료하기 전에 사용되지 않는 지역 변수를 모두 삭제하는 것입니다.

다른 사람의 예를 사용하세요. 참고로

var name = "this window";
var object = {
    name :"my object",
    getNameFunc:function () {
        return function () {
            return this.name;
        }
    }
}
alert(object.getNameFunc()());/弹出this window2 。此时this对象指向window对象
var object2 = {
    name: "my object",
    getNameFunc2: function () {
        var that = th is;
        return function () {
            return that.name;
        }
    }
}
alert(‘that’+object2.getNameFunc2()()); ///弹出my object。此时this对象指向object2对象

관련 권장 사항:

JS 클로저에 대한 간단한 이해

JS 클로저의 일반적인 형태에 대한 자세한 설명

JS 클로저 사용에 대한 샘플 코드 공유

위 내용은 JS 클로저의 특성 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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