2014-09-15 2 views
2

나는 여기서 내가 무엇을 묻고 있는지 정확히 알지 못한다. 나는 단지 그것이 내가 기대했던 것이 아니라는 것을 안다.DOM 요소는 console.log를 참조하여 전달됩니까?

필자는 ID를 기준으로 요소에 대한 참조를 가져온 페이지 스크립트 (아래 참조)를 작성한 다음 몇 가지 기능을 호출합니다. 각 함수는 요소 (또는 해당 textContent)를 콘솔에 기록하고 텍스트 내용을 수정 한 후 다음 함수를 호출합니다. 저를 혼란스럽게하는 것은 그러한 변화가 기록되는 방법입니다.

If I log element.textContent, I get the behavior I expected : 각 로그는 이전 기능에 의해 왼쪽으로 문자열을 인쇄합니다.

* : 각 로그는 로그가 호출되었을 때의 상태가 아닌 최종 상태로 요소를 출력합니다.

이것은 요소의 텍스트 내용이 값으로 기록되는 동안 스크립트가 계속 진행됨에 따라 참조가 전달되어 모든 참조가 함께 업데이트된다고 생각하게합니다.

이것이 사실이라면 어떤 행동을 기대할 수 있습니까? 모든 DOM 참조가 참조로 전달되는 반면 문자열 (프리미티브)은 값으로 전달됩니까? JavaScript는 값을 기준으로 객체를 참조 및 프리미티브로 전달합니다. 그게 여기서 일어나는거야?

* JS Bin의 출력은 Chrome에서 제공하는 내용보다 훨씬 상세하지만, 요소는 object 유형으로 설명되어 있습니다. 내가 사용하고있는 전체 코드는 아래에 element.textContent이 아니라 element이 아닙니다. 이것이 사실이라면

<html> 
<body> 
<p id="paragraph">First paragraph</p> 
<script> 
    (function() { 
    'use strict' 

    var one = function() { 
     console.log(example.textContent) 
     example.textContent = example.textContent.replace('paragraph', 'call') 
     two() 
    } 
    var two = function() { 
     console.log(example.textContent) 
     example.textContent = example.textContent.replace('First', 'Second') 
     three() 
    } 
    var three = function() { 
     console.log(example.textContent) 
     example.textContent = example.textContent.replace('Second', 'Third') 
     console.log(example.textContent) 
    } 

    var example = document.getElementById('paragraph') 
    console.log(example.textContent) 
    one() 
    })() 
</script> 
</body> 
</html> 
+3

모든 객체는 참조로 전달됩니다 (정확하게 말하면 값으로 전달됩니다). 모든 문자열은 값으로 전달됩니다. – zerkms

+0

오른쪽 개체 값은 ** 항상 ** 참조입니다. – Pointy

+1

이것은 값을 전달할 때 문제가되지 않습니다. 대신 console.log-console.log의 문제는 참조를 전달할 때 참조가 참조하는 객체의 스냅 샷을 가져 오지 않습니다. 따라서 사용자가 기록하는 값은 console.log를 호출 할 때가 아니라 콘솔에서 검사 할 때의 값입니다. – slebetman

답변

0

은 어떻게 어떤 행동을 기대하는 지 알고 있나요?

관련 API 문서를 읽으십시오. 예를 들어 DIV element의 HTML5 사양에는 interface HTMLDivElement API에 대한 링크가 포함되어 다양한 방법과 속성이 반환되는 방식을 알려줍니다.

불행히도 HTML5에는 모든 관련 정보가 포함되어 있지 않으므로 textContentW3C DOM Core과 같은 다른 사양을 확인해야합니다.

다양한 web APIs의 Mozilla 개발자 네트워크 (MDN)를 둘러 볼 수도 있습니다. 아마도 가장 간단한 방법은 메서드를 호출하거나 속성에 액세스하여 형식을 사용하여 반환되는 내용을 확인하는 것입니다.

관련 문제