클로저 클로저는 생명주기가 끝난 외부함수의 컨텍스트에 접근하는 함수를 뜻한다. 아래 예제를 통해 살펴보자. function outer() { // 자유 변수 let num = 1; // 클로저 return function() { // 외부 함수의 변수 접근 console.log(num); } } let inner = outer(); // 외부 함수의 생명주기가 끝난 상태에서 호출 inner(); // 1 위 예제를 보면 외부함수의 생명주기가 끝났음에도 정상적으로 num이 출력됨을 볼 수 있다. 이 때 외부함수의 변수를 자유 변수라고 하고, 자유 변수에 접근하는 함수를 클로저라고 한다. 이전 글에서 함수는 생성 당시의 컨텍스트를 [[scope]] 프로퍼티에 가지고 있는다고 말하였다. 아래 그림 1처럼 외부..
프로그램에서 함수를 실행시키면 Call Stack에 함수 호출 정보가 쌓이게 되고, 변수나 인자같은 함수 실행에 필요한 정보를 유지하고 실행 과정을 추적하는데 사용된다. 마찬가지로 자바스크립트도 함수 호출 시 이런 정보를 관리하는데, 이를 실행 컨텍스트라고 부른다. 함수가 호출되면 실행 컨텍스트가 생성되고, 실행 컨텍스트 스택에 쌓인다. 스택 가장 위에 위치하는 실행 컨텍스트가 현재 실행되고 있는 컨텍스트다. 실행 컨텍스트 생성 과정 아래 코드와 같은 함수가 있을 때, 함수를 호출해서 실행 컨텍스트가 생성된 뒤 실행 컨텍스트가 어떻게 쓰이는지 알아보자. function func(arg1, arg2) { let a = 1, b = 2; function func2() { return a + b; } retu..
자바스크립트는 프로토타입 기반의 객체지향 프로그래밍을 지원한다. 자바스크립트의 모든 객체는 [[Prototype]]이라는 숨겨진 프로퍼티가 존재하는데, 이 프로퍼티가 객체의 부모 프로토타입 객체를 가리킨다. 앞선 글에서 생성자 함수를 호출하면, 생성자 함수의 prototype 프로퍼티가 새로 생성된 객체의 [[Prototype]] 프로퍼티에 설정된다고 설명했다. 그림 1과 같이 프로토타입 객체가 설정된 객체는 프로토타입 객체의 메서드를 이용할 수 있다. 아래 코드를 보자. // 생성자 함수 function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; } // Person 프로토타입에 showInfo ..
자바스크립트의 this는 조금 특별하다. 이번 글에서는 자바스크립트의 this에 대해 알아보자. this 바인딩 C나 자바의 this는 인스턴스의 컨텍스트를 가리키는 반면에, 자바스크립트의 this는 호출된 방식과 위치에 따라 달라진다. 객체의 메서드를 호출할 때 this 객체의 프로퍼티가 함수일 경우 이를 메서드라고 부른다. 메서드를 호출하면 메서드의 this는 해당 메서드를 호출한 객체로 바인딩된다. let obj = { name : "kook", getName : function() { return this.name; } } let otherObj = { name : "other", } otherObj.getName = obj.getName; console.log(obj.getName()); // ..
자바스크립트에서 함수는 특별한 객체 타입이다. 이번 글에서는 자바스크립트의 함수에 대해 알아본다. 함수 정의 자바스크립트의 함수를 정의 하는 방법은 3가지가 있다. 함수 선언문 (Function Statement) 함수 표현식 (Function Expression) Function() 생성자 함수 이용 함수 선언문 (Function Statement) 함수 선언문은 function 키워드를 이용하여 함수를 정의하는 방식이다. function add(x, y) { return x + y; } console.log(add(3, 4)); // 7 C나 자바의 함수 선언과 달리 매개변수에 타입을 지정해주지 않는다. 함수 표현식 (Function Expression) 자바스크립트의 함수는 일급 객체라서 변수에 할..
자바스크립트의 데이터 타입은 기본 타입과 참조 타입으로 나뉜다. 기본 타입 컴파일 언어의 기본 타입처럼 그 자체가 하나의 타입을 나타내는 데이터 타입이다. Number 64비트 부동 소수이다. C언어는 정수, 부동소수 타입으로 나뉘지만, 자바스크립트에서는 모두 Number로 처리된다. 따라서 정수끼리의 연산을 해도 소수점이 잘리지 않는다. console.log(5 / 2); // 2.5 String 문자열 타입이다. ' 또는 "로 감싸서 생성한다. 특이한 점은 한번 생성한 문자열은 바꿀 수 없다는 것이다. 따라서 한번 생성한 문자열은 읽기만 가능하다. let str = 'test'; console.log(str); // test str[0] = 'T'; console.log(str); // test (안..
- Total
- Today
- Yesterday
- Barycentric coordinates
- Bin
- Closure
- chunk
- @Qualifier
- Tasklet
- @Autowired
- thymeleaf 변수 인식
- unity
- 클로저
- npm
- thymeleaf cannot resolve
- Check point within polygon
- JavaScript
- @Component
- mybatis
- spring batch
- Express
- @Bean
- MySQL
- nodejs
- spring
- Bean
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |