익명의 개발노트

Scope 본문

프로그래밍/javascript

Scope

캡틴.JS 2019. 2. 26. 13:01
반응형

요약.

1. 하위스코프는 글로벌스코프에 접근가능하다. 

2. var는 함수단위, let, const는 블록단위 스코프임.

3. 전역변수와 window객체

4. 선언없이 초기화된 변수는 전역변수 (매우 위험햇) 

5. 호이스팅 (호이스팅은 var에서만 해당됨) 선언과 할당이 분리되어있어서, 선언만 호이스팅해감.



규칙 1. Local scope vs Global Scope

  

    1)  기본적으로 scope는 중첩이 가능하고, 하위 scope가 상위 scope의 변수에 접근이 가능하다. 

-> 상위 scope 변수가 하위scope 변수 접근불가.

  

    2)  Global Scope는 어디에서도 접근이 가능하다.


    3)  지역변수는 함수 안에서 전역변수보다 높은 우선순위를 가진다.


규칙 2.  Block level vs function level


    1) 자바스크립트는 기본적으로 fuction level의 scoping 규칙을 따른다.


     ※ Function level을 따르지 않는 변수 선언(ES6 기능)


        →  let, const : block을 벗어나면 접근 불가능. var 로 정의된 변수를 재정의 할 수 가 없음.


const는 java로 따지면 상수들에게 사용하는 변수? 라고 이해하면 좋을 듯. 한번 지정하면 값을 재할당 할 수 없음.


var는 함수 단위 스코프, let, const는 블락 단위 스코프임.


     for(let i=0; i<5;i++){

console.log(i);

      }


console.log("final i:",i);

→ final i: 0 (var i 로정의하면 i =5)


규칙 3. 전역변수와 window Object


      1) 함수의 외부에서 선언된 모든 변수는 Global 변수.


      2) 전역범위를 대표하는 객체 : window

 

      3)  모든 전역 변수는 window객체와 연결

  

           var name = "Paul";

           console.log(window.name); // Paul


규칙 4. 선언없이 초기화 되는 변수는 Global 변수


function showAge() {

  // age는 전역 변수.

              age = 90;

              console.log(age);

}

showAge(); // 90

console.log(age); // 90


규칙 5. 호이스팅 : var만 선언시 호이스팅되고, let이나 const는 호이스팅 안된다.

      1) 변수 선언은 범위에 따라 선언과 할당으로 분리되어 있어서 선언한 것만 호이스팅해간다.

         a=2;  //할당
   var a;  //선언
   console.log(a) 면, 
  -----------------------------
 실제는 var a;
          a =2;
          console.log(a) ; // 2출력;
      
      2) 자바스크립트 엔진이 내부적으로 변수 선언을 scope의 상단으로 끌어올림.

      3) 함수선언식은 상단에 무조건 호이스팅 됨.

        var a = function(){} (함수 표현식)  

        function(){} (함수선언식).


ReferenceError: 보통 undefined된 변수에 접근할 때 발생

TypeError: 보통 함수가 아닌 것을 실행하려 할 때 발생

반응형

'프로그래밍 > javascript' 카테고리의 다른 글

this  (0) 2019.02.26
Closure  (0) 2019.02.26
[디버깅] 크롬을 활용한 디버깅하는 법  (0) 2019.02.22
[배열] 내장 메서드  (0) 2019.02.19
[변수] 타입  (0) 2019.02.19
Comments