CSDocumentaion/JavaScript for Web Developers(통칭 노란책)
10.22 강의 클로저와 매개변수
그라파나
2022. 10. 22. 14:41
실행 컨텍스트
Execution context 우리가 작성한 코드가 실행되는 환경
환경정보가 담긴 객체
전역 컨텍스트
window, scope, hoisting, this, function, closure 등등
함수 컨텍스트
함수가 실행될때 불러지는 컨텍스트
호이스팅
변수가 선언되기 전에 유효하다.
코드를 읽고나서 선언하기 전에 이미 전역이든 로컬이든 할당이 되어있다.
console.log("hello");
debugger;
var a =5;
function aaa(){
var a = 0;
console.log("a?");
}
console.log(a);
aaa();
*변수는 정의부만, 함수는 전체가 호이스팅 된다.
스코프
실행하는 위치에서 바로보고 있는 곳, 유효범위
스코프 체인
실행하는 위치에서 없으면 상위 버전을 찾는 것
자신과 가장 가까운 변수 객체의 모든 스코프들을 스코프 체인이라고 할 수 있다.
클로저
클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합이다.
= 함수 + 렉시컬 스코핑
스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다.
이를 렉시컬 스코핑(Lexical scoping)라 한다.
렉시컬 스코핑 ?
스코프 체인이 바인딩한 객체가 렉시컬 스코프
정리
클로저 = 함수 + 스코프 체인이 된 객체들
매개변수?
function a(){
var a = arguments.callee
var b = arguments.length;
var c = arguments
console.log(a);
console.log(b);
console.log(c);
}
console.dir() -> 개발자 도구 확인
예제
function sandwichMaker() {
var ingredient = "peanut butter";
function make(argument) {
return ingredient + " and " + argument;
}
return make;
}
var f = sandwichMaker();
f("cream"); // "peanut butter and cream"