자바 스크립트의 루프, 클로저 및 addEventListener

crezc3nt

저의 영어가 제목에이 상황을 명확하게 설명하기에 충분하지 않기 때문에 너무 구체적인 제목이 아니 어서 죄송합니다.

다음과 같은 코드가 있습니다.

var e = document.getElementsByClassName( "test" );
var myFunc = function( e ) { 
  e = e + 1; 
};

for ( var i = 0, l = e.length; i < l; i++ ) {
    var t = e[ i ];
    var j = 0;
    (function( n, num ){
        num = 0;
        n.addEventListener("click", function() {
          myFunc( num );
          console.log( num )
        });
    }( t, j ));
}

내 의도는 변수 j의 값을 증가시키는 것이지만 클릭 할 j=0때마다 여전히 얻는 결과 .test입니다.

데모

토 말락

문제는 JavaScript가 참조로 원시 값 (예 : 숫자)을 전달하지 않고 값으로 전달한다는 것입니다. myFunc기능이 있어야 변경할 인수에 "외부"값을 할당 할 수 없습니다, 뭔가를 반환합니다.

다음 브라우저가 지원하는 것이 합리적인 가정을 기반으로 더 현대적인 접근의 getElementsByClassName()도 지원 Array.prototype.forEach().

다음은 numHTML 요소 당 하나의 클로저를 생성 합니다.

var elems = document.getElementsByClassName("test"),
    myFunc = function(e) { 
        return e += 1; 
    };

[].slice.call(elems).forEach(function (elem) {
    var num = 0;
    elem.addEventListener("click", function () {
        num = myFunc(num);
        this.textContent = this.textContent.replace(/\d*$/, num);
    });
});
<button class="test">Test 0</button>
<button class="test">Test 0</button>
<button class="test">Test 0</button>


Javascript 참조로 객체를 전달하므로 약간 변경하면 작동합니다.

var elems = document.getElementsByClassName("test"),
    myFunc = function(properties) { 
        properties.num += 1; 
    };

[].slice.call(elems).forEach(function (elem) {
    var properties = {
            num: 0
        };
    elem.addEventListener("click", function () {
        myFunc(properties);
        this.textContent = this.textContent.replace(/\d*$/, properties.num);
    });
});
<button class="test">Test 0</button>
<button class="test">Test 0</button>
<button class="test">Test 0</button>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

브라우저 재로드 페이지 및 DOM 액세스의 자바 스크립트 루프

분류에서Dev

자바 스크립트 클로저와 for 루프

분류에서Dev

자바 스크립트 : 중첩 된 (double) for 루프 내부의 setTimeout 클로저

분류에서Dev

자바 스크립트의 OOP 프로토 타입 및 상속

분류에서Dev

자바 스크립트의 루프 로컬 저장소 개체

분류에서Dev

자바 스크립트 루프 프로

분류에서Dev

자바 스크립트에서 세 개의 div로 페이드 인 및 아웃 루프

분류에서Dev

자바 스크립트-생성자의 속성 및 프로토 타입

분류에서Dev

자바 스크립트 클로저 및 내부 범위

분류에서Dev

클로저 및 자바 스크립트 구문

분류에서Dev

자바 스크립트 클로저 및 용어

분류에서Dev

자바 스크립트 함수 및 IE 오류 addEventListener JQuery

분류에서Dev

자바 스크립트의 싱글 톤 및 프로토 타이핑

분류에서Dev

자바 스크립트로 부트 스트랩 드롭 다운을 객체 및 루프에 연결

분류에서Dev

플라스크에서 자바 스크립트로 변수 호출 및 for 루프 사용

분류에서Dev

자바 스크립트의 루프 및 간격 하이브리드?

분류에서Dev

자바 스크립트 루프, 비동기 함수 및 헤드리스 브라우저

분류에서Dev

자바 스크립트 무한 루프 및 재귀 오류

분류에서Dev

자바 스크립트 : setTimeout, for 루프 및 콜백 함수

분류에서Dev

자바 스크립트 / jQuery 팝업 루프 및 추가

분류에서Dev

자바 스크립트 및 HTML5 루프 문제

분류에서Dev

자바 스크립트 배열 및 .forEach 루프 인수

분류에서Dev

자바 스크립트 배열 및 While 루프

분류에서Dev

자바 스크립트 프로토 타입 및 jQuery

분류에서Dev

자바 스크립트 프로토 타입 및 개인 변수

분류에서Dev

addEventListener 및 setInterval이 Greasemonkey 스크립트에서 자동으로 실패합니다.

분류에서Dev

AppleScript : 자바 스크립트의 루프

분류에서Dev

자바 스크립트의 스택 및 프레임 이해

분류에서Dev

PHP while 루프 및 루프 내부의 다른 요소와 관련된 자바 스크립트 / Jquery 사용

Related 관련 기사

  1. 1

    브라우저 재로드 페이지 및 DOM 액세스의 자바 스크립트 루프

  2. 2

    자바 스크립트 클로저와 for 루프

  3. 3

    자바 스크립트 : 중첩 된 (double) for 루프 내부의 setTimeout 클로저

  4. 4

    자바 스크립트의 OOP 프로토 타입 및 상속

  5. 5

    자바 스크립트의 루프 로컬 저장소 개체

  6. 6

    자바 스크립트 루프 프로

  7. 7

    자바 스크립트에서 세 개의 div로 페이드 인 및 아웃 루프

  8. 8

    자바 스크립트-생성자의 속성 및 프로토 타입

  9. 9

    자바 스크립트 클로저 및 내부 범위

  10. 10

    클로저 및 자바 스크립트 구문

  11. 11

    자바 스크립트 클로저 및 용어

  12. 12

    자바 스크립트 함수 및 IE 오류 addEventListener JQuery

  13. 13

    자바 스크립트의 싱글 톤 및 프로토 타이핑

  14. 14

    자바 스크립트로 부트 스트랩 드롭 다운을 객체 및 루프에 연결

  15. 15

    플라스크에서 자바 스크립트로 변수 호출 및 for 루프 사용

  16. 16

    자바 스크립트의 루프 및 간격 하이브리드?

  17. 17

    자바 스크립트 루프, 비동기 함수 및 헤드리스 브라우저

  18. 18

    자바 스크립트 무한 루프 및 재귀 오류

  19. 19

    자바 스크립트 : setTimeout, for 루프 및 콜백 함수

  20. 20

    자바 스크립트 / jQuery 팝업 루프 및 추가

  21. 21

    자바 스크립트 및 HTML5 루프 문제

  22. 22

    자바 스크립트 배열 및 .forEach 루프 인수

  23. 23

    자바 스크립트 배열 및 While 루프

  24. 24

    자바 스크립트 프로토 타입 및 jQuery

  25. 25

    자바 스크립트 프로토 타입 및 개인 변수

  26. 26

    addEventListener 및 setInterval이 Greasemonkey 스크립트에서 자동으로 실패합니다.

  27. 27

    AppleScript : 자바 스크립트의 루프

  28. 28

    자바 스크립트의 스택 및 프레임 이해

  29. 29

    PHP while 루프 및 루프 내부의 다른 요소와 관련된 자바 스크립트 / Jquery 사용

뜨겁다태그

보관