2013-10-09 2 views
0

이것은 두 가지 질문과 비슷하지만 JavaScript에서 변수를 올바르게 할당하는 방법을 여전히 이해하려고합니다.응용 프로그램의 메서드를 정의하는 방법

내 코드의 출력은 이것이다 :

x: 3 
x: undefined // I was expecting 3 here 

을 그리고 여기 내 코드입니다 : 내가 말을 어디에 문제가 생각

var myApplication = {}; 

(function() { 
    function beep(x) { 
     console.log('x: ' + x); 
     var closure = {}; 
     return function() { 
      console.log('return function() {'); 
      if (arguments.length) { 
       console.log('setter: ' + x); 
       closure.result = x; 
      } else { 
       console.log('getter: ' + closure.result); 
       return closure.result; 
      } 
     } 
    } 
    myApplication.beep = beep; 
})(); 
myApplication.beep(3); 
RESULT = myApplication.beep(); 

: myApplication.beep = 경고음; 프로토 타입이나 다른 방법으로 할당해야한다고 생각합니다.

+0

문제가 있다고 생각합니다. myApplication.beep = beep() 대신 myApplication.beep = 경고음이 필요합니다. –

답변

1

우선, 함수는 자바 스크립트의 일등 시민입니다.

그래서 당신은 당신의 비프 기능의 값으로 돌아오고,이 기능은 실행되지 않습니다

return function() { 
    console.log('return function() {'); 
    if (arguments.length) { 
     console.log('setter: ' + x); 
     closure.result = x; 
    } else { 
     console.log('getter: ' + closure.result); 
     return closure.result; 
    } 
} 

할 때.

그래서, 우리의 경우, 정말가 실행됩니다 유일한 코드는 다음과 같습니다 만 beep에 전달 된 첫 번째 인수를 로그인하는이 경우

var myApplication = {}; 

(function() { 
    function beep(x) { 
     console.log('x: ' + x); 
    } 
    myApplication.beep = beep; 
})(); 
myApplication.beep(3); 
RESULT = myApplication.beep(); 

, 그래서 3 다음 undefined.

이제 여기에 수행 할 작업, 필요 폐쇄, 또는 프로토 타입을 사용하지하기 위해 :

var myApplication = { 
    x : null, 
    beep : function (x) { 
    if (typeof x != 'undefined') { 
     this.x = x; 
    } else { 
     return this.x; 
    } 
    } 
}; 

// set x 
myApplication.beep(3); 
// get x 
var x = myApplication.beep(); 
console.log('x :', x); 

내가 너무 일찍 폐쇄 덤비는 피할 것입니다.

1

처음으로 신호음 (3)을 호출하면 기능을 반환하지만 실제로 해당 기능으로 아무 것도하지 않습니다. 그대로

myApplication.beep = myApplication.beep(3); 

, 난 그냥 다른 기능을 반환 경고음 두 번째 통화를 생각하지만,과의 'X': 나는 ... 당신이 마지막에서 두 번째 줄에이 의미가 있다고 생각 인수가 undefined로 설정되었습니다. 또한

: 전체 개체를 한 번 처음부터에서 선언 할 수

myApplication.beep = function(x) { ... 

또는 : 오히려 선언 후 '경고음'을 할당하는 것보다, 몇 가지 코드 쓰기를 저장하려면, 당신이 쓸 수

myApplication = { 
    beep: function(x) { 
    }, 
    otherFn: function(y) { 
    } 
} 
관련 문제