1. 함수의 구분ES6 이전까지 JS의 함수는 구분없이 다양한 목적으로 사용되었다. 일반적인 함수, new 연산자와 함께 생성자 함수, 객체에 바인딩되어 메서드로 호출할 수 있다. 이러한 사용법은 편리해 보이지만 실수를 유발할 수 있으며 성능적으로도 손해였다.var foo = function () { return 1;};// 일반적인 함수로서 호출foo(); // -> 1// 생성자 함수로서 호출new foo(); // -> foo {}// 메서드로서 호출var obj = { foo: foo };obj.foo(); // -> 1 ES6 이전의 모든 함수는 일반 함수로서 호출할 수 있는 것은 물론 생성자 함수로서 호출할 수 있다. // 프로퍼티 f에 바인딩된 함수는 callable이며 constructo..
함수
실행 컨텍스트는 자바스크립트의 동작 원리를 담고 있는 핵심 개념이다. 1 소스코드의 타입ECMAScript 사양은 소스코드를 4가지 타입으로 구분한다.소스 코드의 타입설명전역 코드전역에 존재하는 소스 코드이며 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않는다.함수 코드함수 내부에 존재하는 소스 코드를 말하며 함수 내부에 중첩된 함수, 클래스 등의 내부 코드는 포함되지 않는다.eval 코드빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드를 말한다.모듈 코드모듈 내부에 존재하는 소스코드를 말하며 모듈 내부의 함수, 클래스 등의 내부 코드는 포함되지 않는다. 소스 코드를 4가지 타입으로 구분하는 이유는 소스코드의 타입에 따라 실행 컨택스트를 생성하는 과정과 관리 내용이 다르기 ..
1. 일급 객체 일급 객체란 다음 조건을 만족하는 객체를 의미한다. 무명의 리터럴로 생성할 수 있다. => 런타임에 생성이 가능 변수나 자료구조(객체, 배열 등)에 저장할 수 있다. 함수의 매개변수에 사용할 수 있다. 함수의 반환값으로 사용할 수 있다. // 1, 2번 조건 const increase = (num) => { return ++num; }; const decrease = (num) => { return --num; }; // 2번 조건 const auxs = { yes: () => { console.log('yes') }, increase, decrease } // 3, 4번 조건 const makeCounter = (increase) => { let num = 0; return () => ..
1. 함수란? 함수는 자바스크립트에서 가장 중요한 핵심이다. 스코프, 실행 컨택스트, 클로저, 메서드, this, 프로토타입, 모듈화, 생성자 함수에 의한 객체 생성 등이 모두 함수과 관련되어있다. 함수는 동작하고자 하는 동작을 미리 만들어둔 기계와 같다. 프로그래밍 언어의 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 함수는 입력을 받아 출력하게 된다. 이때 입력으로 인수를 매개변수로 받게된다. 출력은 반환값을 출력하게 된다. 함수는 함수 정의를 통해 생성한다. 위의 사진은 함수 선언의 예시이며, 다양한 방법으로 함수를 선언할 수 있다. 함수는 정의한뒤 함수 호출을 통해 함수를 실행하게된다. 함수를 호출하면 코드를 실행하게된다. 이때 ..
4. 스코프 역활을 하는 블록 JS에서 함수가 가장 보편적이고 널리 퍼진 디자인 접근법 이지만, 다른 스코프 단위도 존재하며 이를 이용하면 더 깔끔한 코드를 작성할 수 있다. 예를 들어 블록 스코프를 보자. JS는 지원하지 않지만 아래의 코드같은 모습은 많이 봤다. for(let i = 0; i < 10; i++){ ... } 변수 i를 for 반복문의 시작부에 선언하는 이유는 i를 오직 for 반복문과 관련해서 사용하려하기 때문이다. 블록 스코프의 목적은 변수를 최대한 사용처 가까이에서 최대한 작은 유효 범위를 갖도록 선언하는 것이다. 위의 코드에서는 그 목적을 제대로 반영하는 것 같다. 4.1. with with은 사용하게 되면 동작 속도가 저하되지만, 블록 스코프의 형태를 보여주는 한 예로 with..