2014-10-05 2 views
0

저는 codecademy에서 수업을하고 있으며 자바 스크립트가 실행되는 순서를 이해하지 못합니다.자바 스크립트가 위에서 아래로 실행됩니까?

가 나는 펭귄 생성자로 시작 : 나는 여기에 황제 클래스를 생성하고 펭귄

function Emperor(name) { 
this.name = name; 
} 

Emperor.prototype = new Penguin(); 

// 생성에 "황제"개체 및 인쇄에서 상속 할 // 그런 다음

function Penguin(name) { 
    this.name = name; 
    this.numLegs = 2; 
} 

그것이 가지고있는 다리의 수

var me = new Emperor("John"); 

console.log(me.numLegs); 

내 질문 : 나는 내 objec을 정의 할 수 있다는 인상하에 있었다. 상속 전에는 여전히 numLegs 속성을 콘솔 로그에 기록해야합니다. "empeor"객체를 만들기 전에 상속을 설정해야합니까? 그렇다면 javascript가 위에서 아래로 읽는 것을 의미합니까? 다른 것을 들었기 때문입니다.

+0

이것은 수업이 아닙니다. JavaScript에는 클래스가 없습니다. 클래스 기반 객체가 아닌 프로토 타입 기반 객체가 있습니다. 또한 나는 당신이 말하는이 "상속"을 본 적이 없지만 JS 프로토 타입을 많이 사용하지 않으므로 나를 그냥 사용할 수 있습니다. –

+0

상속이 잘못되었습니다. http://blog.slaks.net/2013-09-03/traditional-inheritance-in-javascript/ – SLaks

답변

1

자바 스크립트 문은 표시된 순서대로 실행됩니다.

그러나 함수 선언 문은 포함 된 범위로 끌어 올려지기 때문에 함수가 선언되기 전에 함수가 존재합니다.

함수 (예 : prototype)에서 작동하는 모든 명령문은 여전히 ​​정상적인 순서로 실행됩니다.

+0

을 참조하십시오. 그러나 상속 전에 me 객체를 이동하면 me.numLegs 로그를 콘솔 할 수 없습니다. 이유는 무엇입니까? 그? –

+0

@ StackOverflow421 : 그 코드 ('.prototype =')가 아직 실행되지 않았기 때문입니다. – SLaks

+0

전역 범위까지 끌어 올리는 유일한 방법은 함수 선언과 변수입니까? –

0

예, 위에서 아래로 실행합니다. 함수 정의 (변수에 할당 된 익명 함수에는 적용되지 않음) 및 var 선언 (할당이 아니라 선언)은 현재 범위의 맨 위로 들어갑니다. (JS의 범위가 함수 정의로 맵핑 됨).

+0

이것에 대해 자세히 설명하고 과제와 선언이 의미하는 바가 있습니까? –

+0

'console.log (foo);'를 사용하여 js 파일을 실행하면 Referrence 오류가 발생합니다 (foo는 정의되지 않았습니다). 당신이'console.log (foo); var foo = 5;','var foo '가 맨 위로 올라가므로 오류를 던지지 않습니다. 그러나'var foo' (선언문) 만 끌어 올 수 있기 때문에 'undefined'를 로깅합니다. 할당은 여전히'console.log' 다음에 발생합니다. – PSkocik

+0

호이 스팅 물건은 이상한 특질이다. IMO, 어떤 식 으로든 그것에 의존하지 않는 것이 좋습니다. – PSkocik

관련 문제