2013-07-28 2 views
0

이 코드가 작동하지 않는 이유가 궁금하네요를 사용하여 카운터,만들기 폐쇄 및 자기 호출 기능

var uniqueInteger = function() { 
    var counter = 0; 
    return function() { return counter++; } 
}; 

console.log(uniqueInteger()()); // 0 
console.log(uniqueInteger()()); // 0 
console.log(uniqueInteger()()); // 0 
console.log(uniqueInteger()()); // 0 

이 코드는 않습니다. 유일한 차이점은 나의 noobness 실례 JS에 나는 아주 새로운 해요 대신 CONSOLE.LOG에를 호출하는 호출 함수 자체()

var uniqueInteger = (function() { 
    var counter = 0; 
    return function() { return counter++; } 
}()); 

console.log(uniqueInteger()); // 0 
console.log(uniqueInteger()); // 1 
console.log(uniqueInteger()); // 2 
console.log(uniqueInteger()); // 3 

하고 있습니다. 감사!

+1

의 차이입니다. – basilikum

답변

0

두 번째 코드에서는 uniqueInteger를 정의 할 때 초기화가 완료된 함수를 반환 한 이후로 한 번만 var counter = 0이라는 클로저를 만들었습니다. 첫 번째 코드는 호출 할 때마다 var counter = 0을 만듭니다. 첫 번째 코드로 당신이 할 수있는

참고 : 첫 번째 예를 들어, 당신은 항상`전화 uniqueInteger` 때문에 항상 변수`counter`를 재정의하는 것이

ui = uniqueInteger(); 
console.log(ui()); // 0 
console.log(ui()); // 1 
ui2 = uniqueInteger(); 
console.log(ui()); // 2 
console.log(ui2()); // 0 
console.log(ui()); // 3 
console.log(ui2()); // 1