2017-10-06 2 views
0

Javascript가 잘못된 순서로 이벤트를 처리 할 수있어 혼란 스럽습니다. windows/chrome에서 아래의 코드는 클래스가 변경되기 전에 클래스가 변경된 객체를 콘솔에 출력하지만 클래스 만 출력하면 변경되지 않은 클래스가 표시됩니다. 어떤 사람이 이것을 통치하는 규칙을 설명해 주시겠습니까? 나는 내 물건을 볼 수있는 상태를 예상하는 방법을 모른다.자바 스크립트가 순차적으로 작동하지 않습니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 

 
<head> 
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    <title>Table Schema</title> 
 
</head> 
 

 
<body> 
 
    <a href="#" class="first_class" onclick="checkClass(this)">I am supposed to be first_class!</a> 
 
    <script> 
 
    function checkClass(obj) { 
 
     console.log(obj); 
 
     console.log(obj.className); 
 
     if (obj.className == 'first_class') { 
 
     obj.className = 'second_class'; 
 
     } 
 
    } 
 
    </script> 
 
</body> 
 

 
</html> 
 
<html>

+0

은 문자열이있는 나를위한 첫 번째 클래스를 말하고 obj는 그 순간의 스냅 샷이 아니라 최신 값을 표시합니다. https://stackoverflow.com/questions/30150469/why-console-log-displays-incorrect-objects-values ​​ – epascarello

답변

0

obj의 값은 reference to an object이다.

obj.className의 값은 문자열이며 다른 문자열입니다.

Some consoles are asyncronous. 객체를 렌더링하는 경우 객체의 데이터가 변경되면 업데이트 된 데이터가 표시됩니다.

문자열을 변경할 수있는 방법이 없으므로 문자열이 변경되지 않으므로 문자열을 전달하면 asyncronisity는 중요하지 않습니다.

업데이트 된 개체가 표시되지 않게하려면 this question을 참조하십시오.

+0

감사합니다. @Quentin, 도움이됩니다. 내 유스 케이스에서 문자열 만 전달할 수 있는지 여부를 살펴 보겠습니다. 개체를보다 안정적으로 출력 할 수있는 방법이 있습니까? –

+0

@RobynWyrick - 답의 마지막 문장을보십시오. – Quentin

+0

감사합니다. 링크를 따라 가면 작동합니다. 나는 Mikulas에 동의해야한다, 나는 콘솔의 이런 행동이 프로그래머의 관점에서 선호 될 것이라는 어떠한 상황도 생각할 수 없다. –

관련 문제