14. 변수의 생명 주기전역 변수의 생명 주기는 애플리케이션의 생명 주기와 같음지역 변수의 생명 주기는 함수의 생명 주기와 일치- 클로저처럼 어디선가 스코프를 참조하고 있다면 스코프가 해제되지 않아 지역 변수가 함수보다 오래 생존하는 경우도 있음 var 키워드로 선언한 전역 변수의 생명 주기는 전역 객체의 생명 주기와 일치함- 전역 객체: 클라이언트 사이드(브라우저)에서 window, 서버 사이드(Node.js)에서 global 객체. globalThis라는 식별자로 사용 호이스팅은 스코프 단위로 동작함var x = 'global';function foo() { console.log(x); var x = 'local';}foo(); // undefinedconsole.log(x); // global..
모든 식별자(변수, 함수, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정됨. = 스코프(scope). 식별자가 유효한 범위. 네임스페이스 식별자를 검색하는 규칙 하나의 값은 유일한(중복X) 식별자에 연결 스코프 내에서 식별자는 유일해야 하지만 다른 스코프에는 같은 이름의 식별자를 사용할 수 있음 13.3 스코프 체인 함수는 중첩될 수 있음 함수의 지역 스코프도 중첩될 수 있음 스코프는 함수의 중첩에 의해 계층적 구조를 가짐 스코프가 계층적으로 연결된 것을 스코프 체인이라고 함 자바스크립트 엔진은 변수를 참조할 때 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수를 검색함 자바스크립트 엔진은..
12.2 함수를 사용하는 이유동일한 작업을 반복적으로 수행할 때 미리 정의된 함수를 재사용하는 것이 효율적 유지보수 편의성코드의 신뢰성(실수 ↓)코드의 가독성(적절한 이름을 가졌다면 함수의 역할을 파악하는데 도움됨) 코드는 개발자를 위한 문서 -> 가독성 좋은 코드 = 좋은 코드 12.3 함수 리터럴자바스크립트의 함수는 객체(다른 언어와 차이. > 18. 함수와 일급 객체에서 계속)일반 객체와 달리 호출 가능하고 고유한 프로퍼티를 가짐함수 이름은 함수 몸체 내에서만 참조할 수 있는 식별자 12.4 함수 정의변수는 선언 함수는 정의라고 표현함수 선언문이 평가되면 식별자가 암묵적으로 생성되고 함수 객체가 할당됨 1 함수 선언문function add(x, y) { retu..
상수는 재할당이 금지된 변수 상수와 변경 불가능한 값을 동일시하면 안 됨 원시 값: 변경 불가능한 읽기 전용 값. 불변성을 가짐 변수에 값을 재할당하는 과정 : 새로운 메모리 공간을 확보하여 재할당할 값을 저장한 후 변수가 참조하던 메모리 공간의 주소를 변경 11.1.2 문자열 : 원시 타입, 유사 배열 객체(iterable) 원시 값을 객체처럼 사용하면 원시 값을 감싸는 래퍼 객체로 자동 변환(21.3절 원시 값과 래퍼 객체에서 계속) 원시 타입이기 때문에 인덱스로 접근하여 값을 변경해도 바뀌지 않음 숫자는 크기에 상관없이 8바이트 필요 문자열은 1개의 문자당 2바이트 필요 11.2 객체 프로퍼티의 개수가 정해져 있지 않아 동적으로 추가되고 삭제할 수 있음 -> 메모리 공간의 크기를 사전에 정해둘 수 ..
자바스크립트는 객체 기반의 프로그래밍 언어 원시 값(원시 타입의 값) : 변경 불가능 10.1 객체(객체 타입의 값) - 변경 가능 - 0개 이상의 프로퍼티/메서드로 구성된 집합 - 프로퍼티는 키와 값으로 구성 - 함수도 값으로 취급 가능(일반 함수와 구별하기 위해 함수가 값인 경우 메서드라 부름) - 상태(프로퍼티)와 동작(메서드)을 하나의 단위로 구조화할 수 있어 유용함 프로퍼티: 객체의 상태를 나타내는 값(data) 메서드: 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(behavior) 10.2 객체 리터럴에 의한 객체 생성 C++이나 자바 같은 클래스 기반 객체지향 언어는 클래스를 사전에 정의하고 필요한 시점에 new 연산자와 함께 생성자를 호출하여 인스턴스를 생성하는 방식으로 객체를 ..

