function modify(val, newVal) {
val = newVal;
}
constructorFunc = function() {
var _private = false;
return {
modifyPrivate: function(toVal) {
return modify(_private, toVal); // LINE REFERRED TO BELOW AS X
}
};
}
var x = constructorFunc();
x.modifyPrivate(true);
x.modifyPrivate(true); // _private still starts off as false, meaning it wasn't set to true
내가 가지고있는 질문 중 하나는 x.modifyPrivate (true)를 두 번째로 호출하는 이유입니다. 왜 X 선을 실행하면 전달 된 _private의 값이 여전히 '거짓'입니까?모듈 패턴의 개인 멤버, 변경할 수 없습니까?
클로저에 대한 지식을 약간 변경하면 클로저가 참조로 처리되고 참조의 값을 변경하면 원래 참조가 가리키는 값을 변경하지 않으면이 사실을 이해할 수 있습니다. 어떤 새로운 가치를 가리 키도록 참조 자체를 바꾸고 있습니다 ...하지만이 모든 일은 매우 혼란스럽고 누군가가 저를 설명하는 그물에서 다이어그램을 가리킬 수 있다고 확신합니다.
또한이 코드를 작성하여 _private가 사실 modify() 호출을 위해 수정되도록하는 방법을 알고 싶습니다.
인수가 값으로 전달됩니다. JS. 이는'modify' 함수가 효율적으로 의미가 없음을 의미합니다. 객체에 참조 된 값이 'val'이라도 _local_ copy (= 참조) 값은 객체 자체가 아니라 다시 작성됩니다. – raina77ow
예, 고맙습니다, 나는 그것을 잊어 버린 것을 믿을 수 없습니다. 클로저는 참조를 사용하고, 함수 호출은 값을 사용합니다. 권리! – JayPrime2012