인프런 자바스크립트 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
Scope
- Scope 란?
Scope는 변수에 대한 접근성을 의미한다.
- local Scope vs global Scope
<local Scope>
//잘못된 예시 function myFunction( ){ var carName = "Hyundai"; } console.log(carName); // 결과 : 에러 발생 //함수 안에서 선언된 변수는 함수 안에서만 호출이 가능하다. //함수 밖에서는 함수 안의 변수에 대한 접근성이 없다.(로컬 스코프의 특징) //올바른 예시 function myFunction( ){ var carName = "Hyundai"; console.log(carName); } myFunction( ); // 결과 : Hyundai //즉, 함수 안에서 선언된 변수는 함수 안에서만 호출이 가능하다.
<global Scope>
var carName2 = "KIA"; function myFunction2( ){ console.log(carName2); } myFunction2( ); // 결과 : KIA //즉, 함수 밖에서 선언된 변수는 함수 안팎에서 모두 호출이 가능하다.(글로벌 스코프의 특징)
- 참고 : Scope와 무관한 내용
//함수코드 뒤에 함수의 호출코드가 나오는 경우(일반적인 경우)
var carName3 = "Volvo";
function myFunction3( ){
console.log(carName3);
}
myFunction3( ); //함수 실행가능
//함수의 호출코드 뒤에 함수코드가 나오는 경우
var carName3 = "Volvo";
myFunction3( ); //함수 실행가능
function myFunction3( ){
console.log(carName3);
}
// 결과 : 둘 다 모두 함수가 실행된다.
//함수의 호출코드[myFunction3();]가 함수코드[function myFunction3(){}]보다
//먼저 나와도 에러가 발생하지 않고 함수가 정상적으로 실행된다.
//그 이유는 자바스크립트가 스크립트 태그를 해석할 때 항상 함수코드를 먼저 해석하고,
//이후에 함수의 호출코드를 해석하여 함수를 실행하기 때문이다.(자바스크립트 매커니즘)
//함수를 변수에 선언하고 함수코드 뒤에 함수의 호출코드가 나오는 경우(일반적인 경우)
var carName4 = "benz";
var myFunction4 = function( ){ //함수를 변수에 선언 시, 변수명이 함수이름이 됨
console.log(carName4);
}
myFunction4( ); //함수 실행가능
//함수를 변수에 선언하고 함수의 호출코드 뒤에 함수코드가 나오는 경우
var carName4 = "benz";
myFunction4( ); //에러 발생
var myFunction4 = function( ){
console.log(carName4);
}
// 결과 : 함수를 변수에 선언하는 경우, 반드시 함수코드 뒤에 함수의 호출코드가 와야한다.
//자바스크립트가 함수코드는 먼저 해석하지만, 함수를 변수에 선언하는 경우에는
//해당 변수를 먼저 해석하지 않고 원래의 코드 위치에서 해석을 한다.
//즉, 변수에 함수 선언 시 함수코드[var myFunction4 = function(){}]가 함수의
//호출코드[myFunction4();]보다 뒤에 나올 경우 함수호출 시점에서 함수가 정의되지 않는
//문제가 발생하여 에러가 나타난다.
'Javascript' 카테고리의 다른 글
Javascript - Rest Parameter (0) | 2021.09.30 |
---|---|
Javascript - Default Function Parameter (0) | 2021.09.27 |
Javascript - this 키워드 (0) | 2021.09.27 |
Javascript - 크롬 개발자 도구 (0) | 2021.09.22 |
Javascript - Window 객체 (0) | 2021.09.22 |
댓글