교체 원래 기능 VAR 차이점

yubin :

도와 줘서 고마워. 내가 사용 개념의 정확한 이름을 모르는 죄송합니다.

이 같은 기능을 가지고있다.

var counter = function() {
  var count = 0;
  function changeCount(number) {
    count += number; 
  }
  return {
    increase: function() {
      changeCount(1);
    },
    decrease: function() {
      changeCount(-1);
    },
    show: function() {
      alert(count);
    }
  }
};

지금, 나는이 기능을 가진 거 메이크업 '3'이야, 두 가지 방법이 보인다.

1)

counter().increase()
counter().increase()
counter().increase()
counter().show()

나는이 '3'을 밖으로 던져 것 짐작하지만, 대답은 '0'입니다.

2)

var another = counter();
another.increase();
another.increase();
another.increase();
another.show()

지금은 대답을 '3'을 반환합니다. 그리고 여기 내 질문입니다. 사실상, 변수 "또 다른"그냥 동일한 "카운터 ()". 그럼, 왜 대답이 다른 온?

이전 코드 (카운터 (). 증가 ())를 호출하는 것 '수'위로 'O'의 모든 3 개 선 후 '카운터 (). 증가 ()'. 반면 'another.increase ()'변수 '카운트'의 변화를 쌓아 올린 것으로 보인다. 두 코드 사이의 차이는 단지 " '또 다른'() 카운터와 동일 변수"라고한다. 왜이 서로 다른 대답을 선도?

쿠엔틴 :

카운터 기능이 무엇 봐.

그런 다음 일부 기능을 반환, 0으로 설정하고, 변수를 만듭니다.

당신이 카운터 번 호출하는 경우, 그것은 한 번 것으로한다. 당신이 그것을 세 번 호출하는 경우, 그 세 번한다.

(다음 호출 .increase()의 반환 값에 ... 그리고 첫 번째 예에서의 그 세 가지 다른 일을 하지만 두 번째로,이 같은 일마다입니다).


아니면 다른 방법을 넣어.

경우라고 할 때마다 counter당신은 백지를 가지고 가고 당신의 앞에 내려 놔. 그리고 당신은 전화 할 때마다 increase당신은 당신의 앞에 종이 조각에 틱을 끌었다.

당신도 각에 진드기와 종이의 세 가지 또는 세 가지 틱으로 종이의 한 조각으로 끝낼 것입니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=285019&siteId=1