2017-09-17 2 views
0

메소드의 객체를 반환하는 간단한 모듈 패턴 함수를 만들었습니다.이 경우에는 a를 추가하는 하나의 메소드가 a 고유 ID가있는 div를 만든 다음 특정 섹션 요소에 추가합니다. id는 cardId라는 함수의 private 변수에서 만들어집니다. 변수가 각 함수 호출과 함께 1로 다시 설정되는 것을 이해하지 못하고 대신 함수에서 반환 된 모든 div에 cardId라는 다른 변수와 연관된 변수가 있음을 의미하는 고유 한 ID가 있습니다. 누군가가 이것에 대해 밝히거나 뭔가 저를 가리킬 수 있습니까?이 변수는 각 함수 호출과 정확히 어떻게 재설정되지 않습니까?

let cardTools= function(){ 
    let cardId=1; 

    return { 
     addCard: function(){ 
     let card=document.createElement("div"); 
     let sec=document.getElementsByClassName("memory-cards")[0];//gets a section 

     card.classList.add("card"); 
     card.id="i"; 
     card.id+=cardId; 
     cardId+=1; 

     sec.appendChild(card); 

     return card; 
     } 
    } 
} 

let tools= cardTools(); 

let card=tools.addCard(); //id==i1 
let card2=tools.addCard(); //id==i2 
let card3=tools.addCard(); //id==i3 
+0

당신은 그것이 작동한다고 말하고있는 것이지만 어떻게 이해할 수 있습니까? – Prisoner

+1

음'cardId'는'addCard' 함수 밖에 있습니다. 클로저 ('cardTools' 함수에 의해 만들어 짐)에 함정에 빠졌지 만'addCard' 안에 선언되지 않았기 때문에 호출 할 때마다 다시 선언되지 않습니다. –

+0

간단한 확인. 'cardTools'를 몇 번이나 부릅니까? 일단. 그래서, 'cardId = 1'이 몇 번 실행되어야하는지 ... –

답변

0

먼저 질문을 드리겠습니다. 이 코드가 작동하는지 확인 하시겠습니까?

작동하려면 다음을 수행해야했습니다.

let card1 = cardTools().addCard(); 
console.log(card1.id); 

이렇게하면 각 호출에서 i1을 볼 수있었습니다. 여기에 게시 한 코드 스 니펫에서 구문 오류가 발생했습니다.

업데이트 : 죄송합니다. 코드를 올바르게 읽지 않았습니다. 나는 당신의 코드가 작동하고 있다고 확신한다. 그러나, 내가 이것을했을 때, 나는 각각의 경우에 i1을 얻었다.

+0

실행과 관련하여 실수가 있어야합니다. 'cardId'는'addCard()'밖에서 선언되기 때문에,'cardtools()'의 새로운 객체가 생성되지 않기 때문에 증가 할 것입니다. 그래서'cardId'의 범위가 유지 될 것입니다. 그래서 다시 실행을 확인하라고 제안합니다. –

관련 문제