18장. 함수와 일급객체
·
BOOK/모던 자바스크립트 Deep Dive
18.1 일급 객체다음과 같은 조건을 만족하는 객체를 일급 객체라 한다.무영의 리터럴로 생성할수있다. 즉 런타임에 생성이 가능하다.변수나 자료구조(객체, 배열 등)에 저장할 수 있다.함수의 매개변수에 전달할 수 있다.함수의 반환값으로 사용할 수 있다.// 1. 함수는 무명의 리터럴로 생성할 수 있다.// 2. 함수는 변수에 저장할 수 있다.// 런타임(할당단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.const increase = function (num) { return ++num;};const decrease = function (num) { return --num;};// 2. 함수는 객체에 저장할 수 있다.const auxs = { increase, decrease };//..
16장 프로퍼티 어트리뷰트
·
BOOK/모던 자바스크립트 Deep Dive
16.1 내부 슬롯과 내부 매서드const o = {};o.[[Prototype]] // -> Uncaught SyntaxErroro.__proto__ // Object.prototype 모든 객체는 [[Prototype]] 이라는 내부 슬롯을 갖는다.내부슬롯과 내부 메서드는 ECMAScript 사양에 정의된대로 구현되어 자바스크립트 엔진에서 실제로 동작하지만개발자가 직접 접근할 수 있도록 외부로 공개된 객체의 프로퍼티는 아니다.[[Prototype]] 내부 슬롯의 경우, proto 를 통해 간접적으로 접근할 수 있다.  16.2 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체자바스크립트 엔진은 프로퍼티를 생성할때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동정의한다. 프로퍼티 어트리뷰트..
15장 let, const 키워드와 블록레벨 스코프
·
BOOK/모던 자바스크립트 Deep Dive
15.1 var 키워드로 선언한 변수의 문제점15.1.1 변수 중복선언 허용var 키워드로 선언한 변수는 중복선언이 가능하다.var x = 1;var y = 1;var x = 100;var y; // 초기화문이 없는건 무시console.log(x); // 100console.log(y); // 1중복선언, 값할당됬다면 의도치않게 먼저 선언된 변수값이 변경되는 부작용이 발생한다.15.1.2 함수 레벨 스코프var 키워드로 선언한 변수는 오직 함수블록만을 지역스코프로 인정한다.var x = 1;if(true) [ var x = 10;}console.log(x); // 10코드블록내에서는 모두 전역변수가 되므로 값이 변경되었다.15.1.3 변수호이스팅console.log(foo) // undefinedfoo ..
14장 전역변수의 문제점
·
BOOK/모던 자바스크립트 Deep Dive
14.1 변수의 생명주기14.1.1 지역변수의 생명주기전역변수의 생명주기는 애플리케이션의 생명주기와 같다.하지만 함수내부에서 선언된 지역변수는 함수가 호출되면 생성되고 종료하면 소멸한다.console.log(x); // referenceErrorfunction foo() { console.log(x); // undefined var x = "local"; console.log(x); // local return x;}foo();console.log(x); // referenceError 변수선언은 코드가 한줄씩 순차적으로 실행되기전에 런타임이전단계에서 자바스크립트 엔진에 의해 먼저실행된다고 앞장에서 다뤘었다.하지만 지역변수 x는 함수호출전에는 생성되지않는다. 함수가 호출된후 그다음 자바스크립트 엔진이..
13장 스코프
·
BOOK/인사이드 자바스크립트
13.1 스코프란스코프는 유효범위는 자바스크립트를 포함한 모든 프로그래밍 언어의 기본적이며 중요한 개념이다.var var1 = 1; // 코드의 가장 바깥에서 선언한 변수if(true) { var var2 = 2; // 코드블록 내에서선언한 변수 if(true) { var var3 = 3; // 중첩된 코드블록내에서 선언한 변수 }}function foo() { var var4 = 4;// 함수내에서 선언한 변수 function bar() { var var5 = 5; // 중첩된 함수 내에서 선언한 변수 }}console.log(var1); //1console.log(var2); //2console.log(var3); //3console.log(var4); //ReferenceError : var ..
12장 함수
·
BOOK/모던 자바스크립트 Deep Dive
12.1 함수란?함수는 함수정의, 함수호출로 나눠진다.함수 정의function add(x, y) { return x + y;} 함수 호출add(2,4); // 6 12.2 함수를 사용하는 이유함수는 코드의 재사용측면에서 유용하다.만약에 코드를 수정해야될때 함수를 사용하지않는다면 중복된 횟수만큼 코드를 수정해야하기때문이다.즉 유지보수의 편의성을 높이고 코드의 신뢰성을 높이는 효과가 있다. 12.3 함수 리터럴var f = function add(x, y) { return x + y;}여기서 보면 함수를 만들어서 변수에 할당하고있다.함수리터럴도 값을 생성하기때문에, 값은 객체이다. 즉 함수는 객체이다.단 일반객체는 호출할수없지만 함수는 호출할 수 있다. 필자는 함수가 객체이다 라는게 와닿지않는다. 그냥 함..