JavaScript/모던 자바스크립트 Deep Dive

1 - var 키워드로 선언한 변수의 문제점 var는 JS만의 특이한 특징을 갖고 있어 사용하는데 주의를 요구하는 키워드이다. 이를 무시하고 무분별하게 사용하게 되면 아래와 같은 문제가 발생할 수 있다. 1-1. 변수 중복 선언 허용 var 키워드를 이용해 변수를 중복 선언하면 초기화문의 유무로 다르게 동작한다. 초기화문이 있는 경우는 선언문은 자바스크립트 엔진에 의해 var 키워드가 없는 것처럼 동작한다. 초기화문이 없는 경우는 변수 선언문은 무시된다. 변수를 중복 선언하게 되면 의도치 않게 먼저 선언한 변수의 값이 변경될 수 있는 문제가 발생한다. 1-2. 함수 레벨 스코프 var 키워드로 변수를 선언하면 오직 함수의 블럭만을 지역 스코프로 인정한다. 이것은 함수 이외의 다른 블럭(조건문 등 {}로 ..
자바스크립트를 이용할 때 전역변수를 꼭 사용해야 하는 이유가 없다면 지역변수를 사용해야 한다. 왜 그런지는 이번 글에서 알아보자. 1 - 변수의 생명 주기 변수는 선언에 의해 생성되고 할당을 통해 값을 갖게된다. 그리고 생성이 되었으면 소멸하게 되는데 이를 생명 주기(Life cycle)를 갖는다고 한다. 변수에 생명 주기가 없다면 한번 선언된 변수는 프로그램이 종료되기 전까지 메모리 공간을 차지하게된다. 1-1. 지역 변수의 생명주기 변수는 선언된 위치에서 생성되고 소멸한다. 이를 봤을 때 전역 변수의 생명주기는 애플리케이션의 생명주기와 같다는 것을 알 수 있다. 하지만, 함수 내부(지역)에서 선언된 변수는 함수의 호출에는 생성되고 종료되면 소멸한다. function foo () { var x = "l..
1. 스코프란? 스코프란 식별자가 유효한 범위를 말한다. 혹은 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙이라 할 수 있다. 이는 자바스크립트 엔진이 같은 이름의 식별자를 스코프를 통해 참조를 결정하는 식별자 결정에 영향을 준다. 자바스크립트 엔진은 코드 실행시 코드의 문백을 고려한다. "코드가 실행되는 위치와 주변 환경에 어떤 코드가 있는지"를 렉시컬 환경이라 부른다. 코드의 문맥은 렉시컬 환경으로 이뤄지며 이를 구현한 것이 실행 컨텍스트이다. var x = 'global'; function foo() { var x = 'local'; console.log(x); // 1 } foo(); console.log(x); // 2 만약 위의 코드에서 스코프란 개념이 없으면 같은 이름을 갖는 변수는 ..
1. 함수란? 함수는 자바스크립트에서 가장 중요한 핵심이다. 스코프, 실행 컨택스트, 클로저, 메서드, this, 프로토타입, 모듈화, 생성자 함수에 의한 객체 생성 등이 모두 함수과 관련되어있다. 함수는 동작하고자 하는 동작을 미리 만들어둔 기계와 같다. 프로그래밍 언어의 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 함수는 입력을 받아 출력하게 된다. 이때 입력으로 인수를 매개변수로 받게된다. 출력은 반환값을 출력하게 된다. 함수는 함수 정의를 통해 생성한다. 위의 사진은 함수 선언의 예시이며, 다양한 방법으로 함수를 선언할 수 있다. 함수는 정의한뒤 함수 호출을 통해 함수를 실행하게된다. 함수를 호출하면 코드를 실행하게된다. 이때 ..
Javascript의 타입은 크게 두 가지로 분류된다. 바로 원시 타입과 객체 타입으로 구분할 수 있다. 이렇게 두가지로 분류한느 이유는 무엇일까? 원시 타입은 변경 불가능한 값이다. 하지만 객체 타입의 값은 변경 가능한 값이다. 원시 값을 변수에 할당하면 변수에는 실제 값이 저장된다. 객체를 변수에 할당하면 변수에는 참조 값이 저장된다. 변수에 원시값을 갖는 변수를 할당하면 원시 값이 복사되어 전달된다 ➡ 값에 의한 전달 변수에 객체를 가르키는 변수를 할당하면 참조 값이 복사되어 전달된다 ➡ 참조에 의한 전달 1. 원시 값 원시 타입의 값은 변경 불가능한 값이다. (한번 생성된 원시 값은 읽기 전용 값으로 변경할 수 없다) 하지만 우리는 변수의 원시 값을 재할당을 통해 변경이 가능한데 변경 불가능하다는..
10. 객체란? 객체는 변경이 가능한 값이며, 객체 타입은 다양한 타입의 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조다. 원시값은 변경이 불가능한 값이며, 원시 타입은 단 한개의 값만 나타낸다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키(key)와 값(value)로 구성된다. Javascript에서 사용할 수 있는 모든 값은 프로퍼티의 값이 될 수 있다. 이 말은 자바스크립트의 함수도 값이 될 수 있다는 말이다. 함수가 프로퍼티 값으로 사용된다면 이는 메서드라 부른다. 자바스크립트의 함수는 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 일급 객체이므로 값으로 취급할 수 있다. 객체는 프로퍼티와 메서드로 구성된 집합체다. 프로퍼티 : 객체의 상태를..
58청춘
'JavaScript/모던 자바스크립트 Deep Dive' 카테고리의 글 목록 (2 Page)