현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.
메시지
ReferenceError: "x" is not defined
에러 타입
무엇이 잘못되었을까?
존재하지 않는 변수를 참조하는 곳이 있습니다. 이 변수는 선언되어야 합니다. 또는, 현재 스크립트나 scope 에서 사용이 가능하도록 해야합니다.
Note: 라이브러리(예를 들면 jQuery와 같은)의 로딩은, 반드시 코드에서 "$"와 같은 라이브러리 변수에 접근하기 이전에 수행되어야 합니다. 라이브러리를 로딩하는 <script>
태그가 그 변수를 사용하는 코드보다 앞에 위치하도록 하세요.
예
선언되지 않은 변수
foo.substring(1); // ReferenceError: foo is not defined
"foo" 변수는 어디에도 선언되지 않았습니다. String.prototype.substring()
메소드가 작동하도록 하기 위해서는 문자열을 필요로 합니다.
var foo = "bar"; foo.substring(1); // "ar"
잘못된 스코프
변수는 현재의 실행 흐름 내에서 이용 가능해야합니다. 함수 내부에 정의된 변수는 다른 외부의 함수에서는 접근할 수 없습니다. 그 때문에, 변수는 함수의 스코프 내부에서만 정의 됩니다.
function numbers () { var num1 = 2, num2 = 3; return num1 + num2; } console.log(num1); // ReferenceError: num1 is not defined
그러나, 함수는 모든 변수와 정의된 스코프 안에 정의된 함수에 접근할 수 있습니다. 따라서, 전역으로 정의된 함수는 전역에 정의된 모든 변수에도 접근할 수 있습니다.
var num1 = 2, num2 = 3; function numbers () { return num1 + num2; } console.log(num1); // 2