2016-08-10 3 views
0

좋아, 그래서 정적으로 놀고 있었어 | | 라이브 nodelists는 개념을 테스트하기 위해 노력하고, 내가 다른 시나리오를 시도했지만 내 관심 잡은 두 가지 시나리오가 있습니다 :라이브 및 정적 노드 목록

getElementsBy 때문에 의미가
var toBeLogged = document.getElementsByTagName('p'); 
console.log(toBeLogged.length); // Returns 1 to the console 
var newEl = document.createElement('p'); 
document.body.appendChild(newEl); 
console.log(toBeLogged.length); // Returns 2 to the console 

... 그것은 분명히 것 때문에 라이브 노드 모음입니다은 갱신 후에 값을 다시 요구할 때 갱신 된 값을 리턴하십시오.

하지만 작은 변화 시나리오 두 번째는 정적으로 "라이브"노드 목록 행위합니다 :

var toBeLogged = document.getElementsByTagName('p').length; 
console.log(toBeLogged); // Returns 1 to the console 
var newEl = document.createElement('p'); 
document.body.appendChild(newEl); 
console.log(toBeLogged); // Returns 1 also to the console 

그래서 내 질문은 : 변수가 라이브 노드 목록이의 길이 속성을 표현하기 위해 만든 이유 프로퍼티를 추가하지 않고 노드리스트를 직접 나타내는 변수의 값처럼 라이브 값을 반환하지 않습니다.

내가 할 수있는 한 정확하게 설명하려고합니다. 미리 감사드립니다. 시간을내어 주셔서 감사합니다.

답변

1

document.getElementsByTagName('p').length은 변경 불가능한 프리미티브 값을 반환하지만 변경할 수는 없습니다. .length은 액세스 할 때마다 새 프리미티브 값을 반환하고 document.getElementsByTagName('p')은 매번 같은 개체를 반환합니다.

+0

감사합니다. 좋은 설명입니다. 고맙습니다 Maxx. – Hassan