제로초님의 함수의 범위(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(){})() 같은 모양 - 라이브러리 만들 때 많이 보임 **비공개 변수 기능을 만들어 줌.