내 질문에 정확하게 해당 스레드에서이 일 Javascript revealing module pattern, public properties자바 스크립트 계시 모듈 패턴과 변수
과 동일, 대답이 주어졌다가 아니라 "왜". . 여기에 내 자신의 예제를 재 작성 같은 질문 :이 시나리오에서는
myApp.User = function() {
var firstName = 'Default',
lastName = 'Default';
function setFirstName(name) {
firstName = name;
}
function setLastName(name) {
lastName = name;
}
function getFirstName() {
return firstName;
}
function getLastName() {
return lastName;
}
return {
getLastName: getLastName,
**getFirstName: getFirstName**,
setLastName: setLastName,
setFirstName: firstName
};
};
는, 사용자() getFirstName는 항상에 "기본"evals - 나는 setFirstName 기능을 통해 다른 값으로 변경할 경우에도 마찬가지입니다. 내가 좋아하는 setFirstName로 교체 할 경우
:
return {
getLastName: getLastName,
**getFirstName: getFirstName**,
setLastName: setLastName,
setFirstName: firstName
};
나는 변경된 값에 액세스 할 수있게되었습니다. var firstName은 값에 의해 전달되므로 업데이트 된 값이 반영되지 않습니다. 나는이 기능에 대해 특별한 것이 무엇인지 이해하지 못한다. 함수 내에서 값에 대한 포인터는 어디에 있습니까? 왜 모든 기능이 "마술처럼"업데이트에 액세스 할 수 있습니까?
후 " '기본'항상 evals는"당신이 * 동일한 개체에 처음으로'setFirstName'를 호출하지 않는 경우 *. 게다가,'{setFirstName : firstName}'은'obj.setFirstName' *이 함수가 아니라 (firstName'은 함수가 아니기 때문에) 당신이 원한다고해도 호출 할 수 없다는 것을 의미합니다. (코드는 firstName 변수를 변경하지 않기 때문에 * 항상 'Default'가됩니다.) – user2864740
[JavaScript 클로저는 어떻게 작동합니까?] (http://stackoverflow.com/questions/111102) 중복 가능성이 있습니다./how-do-javascript-closures-work) – Philipp
반환 된 객체의 마지막 속성이'setFirstName : firstname'보다는'setFirstName : setFirstName'일까요? –