전체 글 (17) 썸네일형 리스트형 프로토타입 보호되어 있는 글입니다. 클로저 클로저 상태가 의도치 않게 변경되지 않도록 상태를 안전하게 은닉하고, 특정 함수에게만 상태 변경을 허용하기 위해 사용 외부 변수를 기억하고 이 외부 변수에 접근할 수 있는 함수 외부 함수 보다 중첩 함수가 더 오래 유지되는 경우, 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있음 중첩 함수가 상위 스코프의 식별자를 참조하고 있고 중첩 함수가 외부 함수보다 더 오래 유지되는 경우 이러한 중첩 함수 => 클로저 자바스크립트의 모든 함수는 상위 스코프를 기억하므로 이론적으로 모든 함수는 클로저. 하지만, 상위 스코프의 어떤 식별자도 참조하지 않는 함수는 클로저X 상태를 안전하게 변경하고, 유지하기 위해 사용 자바스크립트의 함수는 숨김 프로퍼티인 [[Environment]]를 이용해 자신.. 실행 컨텍스트 실행 컨텍스트 실행할 코드에 제공할 환경 정보들을 모아 놓은 객체 동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 객체를 구성하고, 이를 콜 스택에 쌓아 올렸다가, 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행 전체 코드의 환경과 순서를 보장 어떤 실행 컨텍스트가 활성화되는 시점에 선언된 변수를 위로 끌어올리고 외부 환경 정보를 구성하고, this 값을 설정하는 등의 동작 자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할 수 있는 개념 실행 컨텍스트를 이해하면, 자바스크립트가 스코프를 기반으로 식별자와 식별자에 바인딩 된 값을 관리하는 방식 호이스팅 발생 이유 클로저 동작 방식 이벤트 핸들러와 비동기 처리의 동작 방식 들을 이해할 수 있음 실행 컨텍스트가 활성화 되는 시점에.. 스코프 스코프 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정 됨 식별자가 유효한 범위 자바스크립트의 경우 오직 함수에 의해서만 스코프가 생성 렉시컬 환경 코드가 어디에서 실행되며, 주변에 어떤 코드가 있는지 코드의 문맥이 이루어진 환경 모든 코드는 실행 컨텍스트에서 평가되고 실행 전역 스코프 전역에 변수를 선언하면 전역 스코프를 갖는 전역 변수가 됨 전역 변수는 어디서든지 참조할 수 있음 지역 스코프 지역에 변수를 선언하면 지역 스코프를 갖는 지역 변수가 됨 지역 변수는 자신이 선언된 지역과 하위지역(중첩 함수)에서만 참조할 수 있음 지역 변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효 스코프 체인 : 스코.. 렉시컬 환경 렉시컬 환경 식별자와 스코프의 실행 컨텍스트 관리 식별자와 식별자에 의해 바인딩된 값 상위 스코프에 대한 참조를 기록하는 자료구조 실행 컨텍스트를 구성하는 컴포넌트 함수가 실행될 때 렉시컬 환경이 구성됨 렉시컬 환경은 환경레코드, 외부렉시컬 환경으로 구성 렉시컬 환경 객체 환경 레코드 모든 지역 변수를 프로퍼티로 저장하고 있는 객체 this 값과 같은 기타 정보도 여기에 저장 외부 렉시컬 환경 현재 렉시컬 환경보다 더 상위의 렉시컬 환경 렉시컬 환경 function makeCounter() { let count = 0; return function() { return count++; }; } # 중첩된 함수를 여러 번 호출할 때에 하나의 makeCounter() 함수를 외부 렉시컬 환경으로 참조하므로 c.. SQL Injection 대응 방법 SQL 인젝션의 가장 기본적인 대응 전략 - 입력값의 유효성 검사 입력 값 유효성 검사 1. 블랙 리스트 방식 SQL 쿼리의 구조를 변경시키는 문자나 키워드를 제한하는 방식. 아래와 같은 문자를 블랙리스트로 미리 정의하여 해당 문자를 공백 등으로 치환하는 방식으로 방어 2. 화이트 리스트 방식 허용된 문자를 제외하고는 모두 금지하는 방식. 개별 문자를 일일이 하나씩 모두 정의하는 것보다 정규식을 이용해서 범주화/패턴화 시키는 것이 유지보수에 더 유리 MVVM 패턴 1.모델(Model) 2.View 3.View Model 뷰는 뷰 모델을 알지만, 뷰 모델은 뷰를 알지 못함. 뷰 모델은 모델을 알지만, 모델은 뷰 모델을 알지 못함. -> 뷰 모델과 모델이 뷰로부터 독립적인 형태 => UI로 부터 비즈니스 로직과 프레젠테이션 로직 분리 가능 1. View UI에 관련된 것 (애니메이션과 같은 UI 로직은 포함하되, 데이터 생성과 같은 비즈니스 로직은 포함 X) UI와 UI로직을 다룸 2. View Model 뷰가 사용한 베서드와 필드 구현 뷰에게 상태변화 알림 뷰모델과 모델은 일대다 관계 형성 뷰 모델은 뷰가 쉽게 사용할 수 있도록 모델의 데이터를 가공해서 뷰에게 제공 프레젠테이션로직과 뷰를 위한 상태를 다룸 3. Model 앱에서 사용할 데이터에 관련된 행외와 데이터.. 블록레벨스코프와 함수레벨스코프 블록레벨스코프 모든 코드블록 (함수, if, for, while, try/catch) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조X. 즉, 코드블록 내부에서 선언한 변수는 지역변수 (let) 함수레벨스코프 함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조X. 즉, 함수 내부에서 선언한 변수는 지역변수이며, 함수 외부에서 선언한 변수는 모두 전역변수 (var) 이전 1 2 3 다음