18-1 일급 객체자바스크립트에서 아래와 같은 조건을 만족하는 객체를 일급 객체 라고한다.무명의 리터럴로 생성할 수 있다. 즉 런타임에 생성이 가능하다.변수나 자료구조에 저장할 수 있다.함수의 매개변수에 전달할 수 있다.함수의 반환값으로 사용할 수 있다.자바스크립트의 함수는 위 조건을 전부 만족하므로 일급 객체이다.// 1. 무명의 리터럴로 생성할 수 있다.// 2. 변수에 저장할 수 있다.// 런타임에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.const increase = function (num) { return ++num;};const decrease = function (num) { return --num;};// 2. 함수는 객체에 저장할 수 있다.const auxs = ..
모던 자바스크립트 Deep Dive
15-1 var 키워드로 선언한 변수의 문제점변수 중복 선언 허용var 키워드로 선언한 변수는 중복 선언이 가능하다.중복 선언시 에러도 발생하지 않아서 의도치 않게 먼저 선언된 변수 값이 변경되는 부작용이 발생한다.함수 레벨 스코프함수의 코드 블록만을 지역 스코프로 인정하기 때문에, 따라서 함수 외부에서 var 키워드로 선언한 변수는 코드 블록 내에서 선언해도 모두 전역변수가 된다.함수 레벨 스코프는 전역 변수를 남발한 가능성을 높인다.변수 호이스팅변수 선언문 이전에 변수를 참조할 시 호이스팅이 되어 있기 때문에 참조가 가능하다. 이는 가독성을 떨어트리고 오류를 발생시킬 여지를 높인다.15-2 let 키워드변수 중복 선언 금지let 키워드로 이름이 같은 변수를 중복 선언하면 문법 에러가 발생한다.블록 레..
14.1 변수의 생명 주기지역 변수의 생명 주기변수는 생명 주기가 있다. 변수선언은 런타임 이전 단계에서 자바스크립트에서 실행되지만, 엄밀히 말하면 이건 전역변수에 한정되어 맞다.함수 내 변수들은 함수가 호출된 직후에 함수 몸체의 코드가 실행되기 이전에 자바스크립트 엔진에 의해 먼저 실행된다.함수 내부에서 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료되면 소멸한다.즉, 지역 변수의 생명 주기는 함수의 생명 주기와 대부분 일치한다.하지만 예외의 경우가 있는데, 클로저의 경우이다.자바스크립트 가비지 콜렉터는 그 누구도 참조하지 않을 때 메모리공간을 해제하는데. 아래와 같이 스코프를 계속 참조하고 있다면 해제하지 않는다(클로저).function foo(){ var x = 10; funct..
13-1 스코프란?모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조 할 수 있는 유효 범위가 결정된다.즉, 스코프는 식별자가 유효한 범위를 말한다.var x = 'global';function foo() { var x = 'local'; console.log(x); // local}foo();console.log(x); // global위 코드 실행시 자바스크립트 엔진은 이름이 같은 두 개의 변수 중 어떤 것을 참조할 지 결정해야 하는데 이를 식별자 결정이라 하며, 이 때 스코프는 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙이다.코드의 문맥과 환경렉시컬 환경: '코드가 어디서 실행되며 어떤 코드가 있는지' 를 렉시컬 환경이라고 부름. 즉 코드의 문맥은 렉시컬 환경으로 ..
12-1 함수란?함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다.수학의 함수처럼 프로그래밍 언어의 함수도 입력을 받아서 출력을 내보낸다. 이때 입력을 전달받는 변수를 매개변수, 입력을 인수, 출력을 반환값 이라고 한다.함수는 함수 정의를 통해 생성한다. 또한 함수의 실행을 명시적으로 지시하는 것을 함수 호출 이라고 한다.12-2 함수를 사용하는 이유함수는 몇 번이든 호출할 수 있으므로 코드의 재사용이라는 측면에서 유리하다. 이는 유지보수의 편의성, 코드의 신뢰성을 높이는 효과를 준다.또한 적절한 함수 이름은 코드의 가독성을 향상시킨다.12-3 함수 리터럴자바스크립트의 함수는 객체 타입의 값이다.함수 리터럴은 아래의 요소로 구성된다.function 키워드함수 이..
11-1 원시 값자바스크립트가 제공하는 8가지 데이터 타입은 크게 원시타입과 객체타입으로 구분 할 수 있다. 원시 타입과 객체 타입은 크게 3가지 측면에서 다르다.원시 타입의 값은 변경 불가능한 값이다. 객체(참조) 타입의 값은 변경 가능한 값이다.원시 타입의 값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장된다. 객체를 변수에 할당하면 변수에는 참조 값이 저장된다.원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사 되어 전달된다.(값에 의한 전달) 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다. (참조에 의한 전달)변경 불가능한 값원시 타입의 값, 즉 원시 값은 변경 불가능한 값이다. 변경 불가능 하다는 것은 변수가 아니라 값에 대한 ..