제로초님의 함수의 범위(scope)를 보고 기억할 부분만 쓴 글입니다.


  • 전역 변수 (global variables)

     최대양 지양해야함. 
     왜냐하면 JS의 제일 바깥 범위에 변수를 만드는 것인데
     즉, **window 객체에 변수를 만드는 것
    


  • window 객체에 변수를 선언, 대입해 놓으면 다른 지역 변수에 영향을 받기 쉬워서 여러명이서 일할 때 서로 모르는 사이에 변경하고 왜 에러가 나는지 모를 수 있음.


  • JS는 변수의 범위를 호출한 함수 지역 스코프부터 전역스코프까지 넓혀가며 찾는다.

     나의 머릿 속 이미지 :
     하위 -> 상위 같은 느낌
     child -> parent 같은 느낌
     **절대 equal 아님! feel임
    


  • 스코프 체인 : 내부함수 -> 외부함수 접근 가능, 외부함수 -> 내부함수에 접근 불가

     나의 머릿 속 이미지 :
     안에서는 바깥 접근 가능
     바깥에서는 안으로 접근 불가
     바깥 쪽으로만 열린 문 같은 느낌
     뇌가 사람을 컨트롤 하지만 사람이 뇌를 컨트롤 하는게 불가능한 느낌
     **절대 equal 아님! feel임
    


  • lexical scoping(렉시컬 스코핑, 정적 스코프) : 스코프는 함수를 호출할 때가 아니라 선언할 때 생긴다.

     스코프는 함수 호출할 때 아니고
     선언할 때 생김!
    
     스코프 체인 처럼 function 안의 function의 형태가 아니고
    
     func a() {
         console.log(ab); // 결과 undefined
     }
    
     func b(){
         var ab = 'whatever';
         a() // 호출만.
     }
    
     같은 형태일 때 func a 안의 ab는 스코프가 global까지 가도 없기 떄문에 
     undefined가 나오는 것이 당연하다.
    


  • IIFE (즉시 호출식 함수 표현식) : 모듈패턴이라고도 함

     모듈패턴 : 함수 선언하자마자 바로 실행 시키기
     (function(){})() 같은 모양 - 라이브러리 만들 때 많이 보임
     **비공개 변수 기능을 만들어 줌.