Javascript (7) 썸네일형 리스트형 프로토타입 보호되어 있는 글입니다. 클로저 클로저 상태가 의도치 않게 변경되지 않도록 상태를 안전하게 은닉하고, 특정 함수에게만 상태 변경을 허용하기 위해 사용 외부 변수를 기억하고 이 외부 변수에 접근할 수 있는 함수 외부 함수 보다 중첩 함수가 더 오래 유지되는 경우, 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있음 중첩 함수가 상위 스코프의 식별자를 참조하고 있고 중첩 함수가 외부 함수보다 더 오래 유지되는 경우 이러한 중첩 함수 => 클로저 자바스크립트의 모든 함수는 상위 스코프를 기억하므로 이론적으로 모든 함수는 클로저. 하지만, 상위 스코프의 어떤 식별자도 참조하지 않는 함수는 클로저X 상태를 안전하게 변경하고, 유지하기 위해 사용 자바스크립트의 함수는 숨김 프로퍼티인 [[Environment]]를 이용해 자신.. 실행 컨텍스트 실행 컨텍스트 실행할 코드에 제공할 환경 정보들을 모아 놓은 객체 동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 객체를 구성하고, 이를 콜 스택에 쌓아 올렸다가, 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행 전체 코드의 환경과 순서를 보장 어떤 실행 컨텍스트가 활성화되는 시점에 선언된 변수를 위로 끌어올리고 외부 환경 정보를 구성하고, this 값을 설정하는 등의 동작 자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할 수 있는 개념 실행 컨텍스트를 이해하면, 자바스크립트가 스코프를 기반으로 식별자와 식별자에 바인딩 된 값을 관리하는 방식 호이스팅 발생 이유 클로저 동작 방식 이벤트 핸들러와 비동기 처리의 동작 방식 들을 이해할 수 있음 실행 컨텍스트가 활성화 되는 시점에.. 스코프 스코프 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정 됨 식별자가 유효한 범위 자바스크립트의 경우 오직 함수에 의해서만 스코프가 생성 렉시컬 환경 코드가 어디에서 실행되며, 주변에 어떤 코드가 있는지 코드의 문맥이 이루어진 환경 모든 코드는 실행 컨텍스트에서 평가되고 실행 전역 스코프 전역에 변수를 선언하면 전역 스코프를 갖는 전역 변수가 됨 전역 변수는 어디서든지 참조할 수 있음 지역 스코프 지역에 변수를 선언하면 지역 스코프를 갖는 지역 변수가 됨 지역 변수는 자신이 선언된 지역과 하위지역(중첩 함수)에서만 참조할 수 있음 지역 변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효 스코프 체인 : 스코.. 렉시컬 환경 렉시컬 환경 식별자와 스코프의 실행 컨텍스트 관리 식별자와 식별자에 의해 바인딩된 값 상위 스코프에 대한 참조를 기록하는 자료구조 실행 컨텍스트를 구성하는 컴포넌트 함수가 실행될 때 렉시컬 환경이 구성됨 렉시컬 환경은 환경레코드, 외부렉시컬 환경으로 구성 렉시컬 환경 객체 환경 레코드 모든 지역 변수를 프로퍼티로 저장하고 있는 객체 this 값과 같은 기타 정보도 여기에 저장 외부 렉시컬 환경 현재 렉시컬 환경보다 더 상위의 렉시컬 환경 렉시컬 환경 function makeCounter() { let count = 0; return function() { return count++; }; } # 중첩된 함수를 여러 번 호출할 때에 하나의 makeCounter() 함수를 외부 렉시컬 환경으로 참조하므로 c.. 블록레벨스코프와 함수레벨스코프 블록레벨스코프 모든 코드블록 (함수, if, for, while, try/catch) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조X. 즉, 코드블록 내부에서 선언한 변수는 지역변수 (let) 함수레벨스코프 함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조X. 즉, 함수 내부에서 선언한 변수는 지역변수이며, 함수 외부에서 선언한 변수는 모두 전역변수 (var) ES6 특징 const 사용되면 변수를 다시 할당할 수 없다. 객체와 함께 사용할 때를 제외하고는 변경 불가능한 변수 변수 선언과 할당이 항상 동시에 일어나야 한다. 사용할 때 절대 바뀌면 안되는 것에 사용하면 좋다. let 새로운 값을 가질 수도 있고 재할당할 수도 있다. => 변경 가능한 변수 생성 선언과 할당이 나뉠 수 있다. Hoisting 변수의 정의가 그 범위에 따라 선언과 할당으로 분리되어 변수의 선언을 항상 컨텍스트 내의 최상위로 끌어올리는 것을 의미 자바스크립트에서 함수의 호출을 첫 줄에서 하고 마지막 줄에 함수를 정의해도 문제없이 작동되도록 하는 유용한 특성 var 선언 말고 let으로로 선언하면 호이스팅을 막을 수 있다.('undefined'를 할당하지 않기 때문) 실제 현업에서는 var 키워드는.. 이전 1 다음