별로 ...
// make a global variable
var a = [1,2,3];
// Assign it to something
var someObj = { value: a };
someObj.value; // [1,2,3];
// set a new value for the global
a = [];
a; // []
someObj.value; // [1,2,3];
이것은 당신이 언급 초기 코드입니다. 전역 변수가 가리키는 오브젝트는 변경할 수 있지만 대체중인 오브젝트에 대한 다른 참조는 변경할 수 없습니다.
그리고 같은 문제가 두 번째 예와 함께 존재합니다
// make a global variable
var globals = { a: [1,2,3] };
// Assign it to something
var someObj = { value: globals.a };
someObj.value; // [1,2,3];
// set a new value for the global
globals.a = [];
globals.a; // []
someObj.value; // [1,2,3];
당신이 참조를 업데이트하려는 경우는 globals
컨테이너 객체를 참조해야합니다. 다른 객체가 컨테이너에 대한 참조를 보유하고있는 경우 해당 컨테이너의 내용을 변경할 수 있습니다.
// make a global variable
var globals = { a: [1,2,3] };
// assign a reference to the container in another object.
var someObj = { globals: globals };
someObj.globals.a; // [1,2,3];
// set a new value for the global
globals.a = [];
globals.a; // []
someObj.globals.a; // [];
다소 다루기 힘든 생각.
개체 참조를 바꾸지 않고 전역으로 변경할 수도 있습니다.
var a = [1,2,3];
var b = a; // a and b now reference the same object.
a.splice(0); // remove all items from this array, without replace the array object.
a; // [];
b; // [];
// a and b now still point to the same array, which is now empty.
객체는 아직 프로토 타입을 가질 수있다, 그것은해야합니다! 그게 무슨 자바 스크립트입니다. 프로토 타입의 객체, 빈 또는 아닙니다! 'null '도 무언가이기 때문에 아무것도 아니기 때문에'[]'도 무언가이지만'var A = undefined'는 정의되어 있지 않지만 A는 일부 proto/type의 객체로 존재합니다! –
@ alex23, 다른 게시물을 참조 해 주셔서 감사합니다. 'myglobals.A.splice (0)'이 실제로는 최선의 방법은 아닌 것 같습니다. 브라우저는 메모리를 수집 할 수 있도록 허용 된 대답에서 'null'로 설정해야합니다. – tim
@codelio, 아마 내 질문에 잘 대답하지 않아요. 그럴 경우 미안 해요. 아래의 답은 옳지 않습니다 :'A = undefined'를 설정하면'typeof (A)'는'undefined'를 반환하지만'object '를 얻을 것이라고 기대합니다. – tim