본문 바로가기

Web/Javascript

(29)
실행 콘텍스트 - Execution Contexts - 함수의 실행 영역 - 함수 코드를 실행하고 - 실행 결과를 저장 실행 콘텍스트 = { 렉시컬 환경 컴포넌트 = { 환경 레코드 : {}, 외부 렉시컬 환경 참조 : {[[scope]]} }, 변수 환경 컴포넌트 = { 환경 레코드 : {}, 외부 렉시컬 환경 참조 : {[[scope]]} }, this 바인딩 컴포넌트 = {} }
클로저(closure) 클로저(closure)는 내부함수와 밀접한 관계를 가지고 있는 주제다. 내부함수는 외부함수의 지역변수에 접근 할 수 있는데 외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근 할 수 있다. 이러한 메커니즘을 클로저라고 한다. var a = 1; function freeAdder(b) { return function(c) { return a + b + c; } } var add2 = freeAdder(2); add2(3); // 6 - [[scope]] 참조하여 내부함수에서 외부함수 변수 사용
바인딩(Binding) 바인딩 - 구조적으로 결속된 상태로 만드는 것 - 대상 : 오브젝트와 프로퍼티 이름 get = { qty: value, price: value } 바인딩 목적 - 스코프 결정 - 오브젝트에서 이름 식별 바인딩 시점 정적 바인딩(Lexical Binding) - 초기화 단계에서 바인딩 - 변수, 함수 표현식에 초기값 설정 : undefined - 함수선언문 : Function 오브젝트 생성 - 대부분의 함수가 정적 바인딩 동적 바인딩(Dynamic Binding) : 사용 권장하지 않음(보안문제,엔진부하 등) - 실행 단계에서 바인딩 - eval 함수, with 문(for-in문으로 대체하여 사용 권장) 바인딩 시점이 중요한 이유 - 바인딩할 때 스코프가 결정되기 때문 - 정적 바인딩은 [[Scope]]
글로벌 오브젝트 글로벌 오브젝트- 빌트인 오브젝트 중에 하나- 전체 프로그램을 통해 하나만 존재 - 전체 프로그램 : 모든 에 작성한 코드- 첫번째 에서 한 번만 생성- new 연산자 사용 불가 글로벌 스코프- 전체를 통해 하나만 존재하므로 - 스코프도 하나 - 글로벌 스코프이므로 모든 프로그램에서 사용 가능 - 최상위 스코프 - 검색한 프로퍼티가 없으면 undefiend 반환 - 스코프 설정 - Function 오브젝트의 [[Scope]]에 설정 글로벌 함수함수 구분- 글로벌 함수 : 전역 함수- 로컬(Local) 함수 : 지역 함수 글로벌 함수- 글로벌 오브젝트에 작성한 함수'use strict'; 사용 권장strict 모드일때 : var를 사용하지 않고 함수를 선언하면 에러- 글로벌, 지역에 관계없이 var 키워드..
스코프(Scope) 스코프(Scope)- 함수가 실행될 때 영향을 받는 범위 split()의 스코프- split()은 String 오브젝트의 scope- Number 오브젝트에서 split()은 스코프가 달라 사용불가 사용목적- 범위제한, 신속한 검색/접근- 같은 프로퍼티 이름 사용 가능- String의 indexOf(), Array의 indexOf() 스코프 설정 시점- Function 오브젝트를 생성할 때- 함수를 호출할 때 설정하지 않음- 따라서 function 안의 코드에 대해서는 구조를 만들지 않음- 밖에서 안으로 들어가면서 스코프 구조 형성 스코프 체인- 스코프가 상하 구조로 연결된 개념/구조- ES3에서 채용ES5에서 scope chain 용어 폐지- 렉시컬 환경 사용
Arguments 오브젝트 parameter 수가 고정일때- parameter 사용 parameter 수가 유동적일때- arguments[] 사용 length 프로퍼티- Array-like : 0부터 인덱스를 key로 사용하고 length를 가짐{0:1, 1:2, 2:3, length:3} 해석단계1. 함수 호출2. 파라미터 할당3. arguments 오브젝트 생성
함수 정의 함수 정의 - 함수 선언문 function a(){} - 함수 표현식 var a = function(){} -new function - 문자열로 작성 엔진 해석 -함수 선언문 먼저 해석 -함수 표현식 해석 function sports(){ debugger; var player = 11; function soccer(){ return player; }; var swim = function(){}; soccer(); } sports(); 해석단계 1. 함수 선언문 해석 2. 변수 초기화 -undefined 값 할당 3. 자바스크립트 코드 실행 function sports(){ baseball(); function baseball(){} } 이런 개념을 호이스팅 함수 선언문 오버라이딩 function test..
JavaScript - FILTER filter() 메소드는 제공된 함수로 구현된 테스트를 통과하는 모든 요소가 있는 새로운 배열을 만듭니다. var new_array = arr.filter(callback[, thisArg]) 예) 모든 작은 값 걸러내기 다음 예는 값이 10 이하인 모든 요소가 제거된 걸러진 배열을 만들기 위해 filter()를 사용합니다. function isBigEnough(value) { return value >= 10; } var filtered = [12, 5, 8, 130, 44].filter(isBigEnough); // filtered 는 [12, 130, 44] JSON에서 무효한 항목 거르기 다음 예는 0이 아닌, 숫자 id인 모든 요소의 걸러진 json을 만들기 위해 filter()를 사용합니다. ..