자바 스크립트는 컴파일되지 않고 실행 만합니다. 따라서 컴파일 타임 오류가 없어야하며 런타임 오류 만 있어야합니다. 그러면이 코드가 왜 작동하지 않습니까?정의되지 않은 참조로 함수 실행
function show() { console.log(x); }
(function() {
var x = 42;
show();
})()
제 질문은이 코드를 개선하는 방법이 아닙니다. 나는 그것이 나쁜 코드임을 깨닫고 그것을 수정하는 방법을 이미 알고있다 (아래 참조).
내 질문은 왜 내가 얻는거야 잡히지 않은 ReferenceError
? Javascript가 런타임에 오류를 throw하는 경우에만 익명 함수 안에있는 show()
을 호출 할 때 x == 42
을 알고 있어야합니다.
작업 코드 :
(function() {
var x = 42;
function show() { console.log(x); }
show();
})()
작업 코드, 최선의 선택 : JS에서
function show(y) { console.log(y); }
(function() {
var x = 42;
show(x);
})()
'x '는'show()'의 범위에 존재하지 않으며, 익명 함수의 범위 안에서 선언됩니다. 예, 익명 함수는 자체 범위를 갖습니다. 그리고 당신의 관련 질문 - Javascript는 인터 프리트 된 언어이고 당신은 그것을 컴파일하지 않지만 현대의 JS 엔진에서는 코드가 해석 될 때 머신 코드로 컴파일합니다. – skyline3000