2012-06-18 2 views
0
내가 자바 스크립트에 새로운 오전

지나가는 인수에 액세스하고 나는이 같은 코드를 작성했습니다은 자바 스크립트가 아웃

file myclass.js 
//---------------------------------------------- 

function myclass() { 
    this.functionA = function (value) { 
     var _this = this; 
     _this.functionB(); 

     } 

    this.functionB = function() { 
    // here I am using the value passed to functionA when it is called. 
     alert(value); 
     } 
} 

// ------------------ ------------------------------------------------

file main.js 
//----------------------------------------- 
    mc = new myclass(); 
    mc.functionA (45); 
//------------------------------------- 

여기 나는 필자가 함수를 호출 한 함수를 호출했습니다. functionA에서 functionB를 호출했을 때 functionB에서 인수를 전달하지 않았지만 여전히 액세스 할 수있었습니다. 아무리 친절하게 설명 할 수 있습니까?

PS 값은 글로벌되지 않습니다 내가 당신의 행동을 재현 할 수 있지만 난 당신이 전달됩니다 value라는 외부 범위에 정의 된 다른 변수가 있다고 가정 어떤 다른

감사

+0

** 폐쇄 **라고합니다. 그것에 대해 자세히 알아보십시오 : http://stackoverflow.com/questions/111102/how-do-javascript-closures-work –

+1

답변을 주셔서 감사합니다하지만 closure.because 나는 functionB 안에 functionB을 defing되지 않습니다. 나는 단지 그것을 –

+2

이라고 부르고있다. 예기치 않은 동작을 보여주는 완벽한 예제를 만드는 것이 좋다. 이 스 니펫으로는 작업 할 수 없습니다. – Triptych

답변

1

을 사용하지 functionA을 매개 변수로 사용합니다. 그래서 당신이 보는 것은 하나가 아니라 두 개의 변수과 같은 이름과 값을가집니다. 그런

뭔가 : 당신이 functionA에 대한 value 매개 변수와 외부 범위에서 value 변수의 이름을 변경하는 경우

function SomeConstructor() { 
    var value = 'Surprise'; // * VALUE_1 

    this.functionA = function (value) { // VALUE_2 
     var _this = this; 
     _this.functionB(); 
    } 

    this.functionB = function() { 
     // Here you're using the value from starred line above 
     // VALUE_1 
     alert(value); 
    } 

    // Here you also pass the same value and later assumes that 
    // functionB sees it as a parameter (VALUE_2) 
    functionA(value); 
} 

주의 모든 혼란이 사라지고 :

function SomeConstructor() { 
    var value1 = 'Surprise'; 

    this.functionA = function (value2) { 
     var _this = this; 
     _this.functionB(); 
    } 

    this.functionB = function() { 
     // Here you're using the value from starred line above 
     alert(value1); 
    } 

    // Here it's clear that the parameter you're passing is not used at all 
    functionA(value1); 
} 

코드를 확인하고 있는지 확인 그렇습니다.


편집 : 당신이 당신의 질문을 편집 한 후에 나는 아직도 당신의 사건을 재현 할 수 없습니다. 그 스크립트가 페이지의 유일한 스크립트인지 확인하십시오. 아마도 페이지에 코드를 추가하는 브라우저 애드온이나 확장 프로그램이 설치되어있을 수도 있습니다. Chrome Dev Tools에서 다음과 같이 표시됩니다.

"ReferenceError: value is not defined" 
+0

괜찮습니다. 이것을 확인하겠습니다. 감사합니다. @ 앤드류 –

관련 문제