초보자 JS 딜레마 :키핑 기능 참조
var a = function() {console.log(5);}
var b = a;
a = function() {console.log(6);}
분명히
b == function() {console.log(5);}
질문은, 그 b는 가리 킵니다 그래서 나는,/포장 원래의 함수에 대한 참조를 유지하여 a
을 수정하는 방법 수정 된 것도 역시?
초보자 JS 딜레마 :키핑 기능 참조
var a = function() {console.log(5);}
var b = a;
a = function() {console.log(6);}
분명히
b == function() {console.log(5);}
질문은, 그 b는 가리 킵니다 그래서 나는,/포장 원래의 함수에 대한 참조를 유지하여 a
을 수정하는 방법 수정 된 것도 역시?
약간 혀 -에 - 뺨,하지만 난 바로 당신을 얻는 경우에 당신이 뭘 하려는지 달성해야
이var b = function() { a(); }
이 줄은 :
var a = function() {console.log(5);}
... 생성 메모리에있는 객체 - 함수 -에 대한 참조를 a
에 저장합니다.
마찬가지로,이 라인 : b
에
b = a;
... 저장 a
에 참조.
a = function() {console.log(6);}
그것은 a
에서 몇 가지 새로운 기능에 대한 참조를 저장합니다. 이것은 b
에 전혀 영향을주지 않습니다. 즉, b
은 이 아니며이 아니며 별칭이 인 경우는 a
입니다. 우연히 한 번은 a
과 같은 메모리 위치를 가리켰다. 그것들은 메모리 내의 임의의 객체를 가리킬 수있는 별개의 독립 변수입니다. 그들은 같은 대상을 가리킬 수 있습니다. 그렇지만 그것이 그 대상과 관련이 있습니다.
변수에 새 값을 할당하면 참조가 손실됩니다.
var a = { func: function() { console.log(5); } };
var b = a;
b.func(); // will print 5 to the console
a.func = function() { console.log(6); };
b.func(); // will print 6 to the console
자바 스크립트가 당신에게 포인터를 직접 제어를 제공하지 않습니다,하지만 당신은 결코 a
또는 b
을 다시 할당하지하여 해당 해결할 수 있습니다 당신은 그러나 함수 주위에 개체 래퍼를 사용할 수 있습니다. 대신 둘 다 동일한 객체를 가리 키도록 설정 한 다음 객체의 속성을 변경하십시오.
var a = {fn:function() {console.log(5);}};
var b = a;
a.fn = function() {console.log(6);};
b.fn(); // logs 6
그건 사실이 아니야. 모든 변수는 포인터 (또는 오히려 참조)입니다. 그러나 변수의 주소를 가져 오거나 변수에 대한 참조를 만들 수는 없습니다. – SLaks
죄송합니다, 내 말씨 (또는 생각 ...) 조금 안개가났다. 잘하면 지금은 분명해. –
'해결책'을 제안했지만 더 큰 문제가 귀하의 디자인에서 발생한다는 의심이 있습니다. 누군가가 아마이 JavaScript-esque를하는 방법을 지적 할 수 있도록 약간의 문맥을주고 싶을지도 모른다. 나는 새로운 언어를 배울 때마다 붙어있는 많은 시간을 보았지만 언어에 의해 의도 된 것과는 다른 방식으로 물건을 만들고있다. 비록 그것이 완료 되더라도, 그것은 전형적으로 시간 낭비이고 그 언어로 향상시키는 것을 돕지 않습니다. – Nicolas78
Nicolas가 옳습니다. 너 뭐하려고? – SLaks