2017-09-12 1 views
1

그래서 난이 (myFuncs 배열 참조)자바 스크립트 클로저 - 인생의 함수 내에서 "계수 '의 사본을 저장할 수 없습니다

내가 원하는 둘 사이의 함수 선언에 0에서 4로 변경 글로벌 VAR라는 수입니다. 클로저를 만들고 첫 번째 함수에 대해 0, 두 번째 함수에 4를 저장합니다.

어쨌든 IIFE (Immediately Invoked Function Expressions)를 사용하여 새 어휘 범위를 만들고 복사본을 저장하더라도 (as j)와 함께, 그들은 여전히 ​​count = 4를 가리키고 있으므로, 함수가 실행될 때 첫 번째 함수와 두 번째 함수는 모두 예상 한대로 "My value : 4"를 두 번 인쇄합니다.

"내 값 : 0" "내 값 : 4"

var myFuncs = {}; 

var count = 0; 

myFuncs[0] = function(){ 
    (function(){ 
     var j = count; //create a closure over the count value and save it inside the IIFE scope 
     console.log("My value: " + j); //expecting j to be 0 
    })(); 
} 

count = 4; //Update value inbetween two function declarations 

//same as above but the j here should be 4 
myFuncs[1] = function(){ 
    (function(){ 
     var j = count; //create a closure over the count value and save it inside the IIFE scope 
     console.log("My value: " + j); 
    })(); 
} 

myFuncs[0](); //My value: 4 
myFuncs[1](); //My value: 4 
+1

패스)}'같은 수() 계산; '와 (함수 ('처럼 허용 횟수)'{I가 카운트 범위 체인 올라가고 중첩 영역을 통해 접근 알았는데 – Rajesh

답변

1

당신이 기능에 참조하기 때문에 실제로 그 변수와 클로저를 만들 아닙니다. 그것은 전달되어야하며, 가치가있는 것을 사용해야합니다.

 myFuncs[0] = function(j){ 
      return function(){ 
       console.log("My value: " + j); 
      }; 
     }(count); 
+0

및 전달하기와 동일 또는 참조로 전달하는 것과 가치 형으로 전달하는 것 중 하나입니까? –

관련 문제