FE(36)
-
[Javascript] 전역 변수 문제점
변수 생명 주기 지역 변수 생명 주기 함수 내부에 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다. function foo(){ var x = 'local'; console.log(x); return x; } foo(); console.log(x); // error 변수 선언은 런타임 이전 단계에서 JS엔진에 의해 먼저 실행되지만 전역 변수에 한정된 것이다. 함수 내부에 선언된 변수는 함수가 호출된 직후 함수 내부 코드 실행 전 JS엔진에 의해 먼저 실행된다. 일반적으로 지역변수와 함수의 생명주기는 일치하지만 함수보다 오래 생존하는 경우가 있다. 함수 내부에 선언된 지역 변수는 함수가 생성한 스코프인 렉시컬 환경에 등록된다. 변수에 할당된 메모리 공간은 아무도 참조하지 않을 때 가비..
2022.10.07 -
[Javascript] 스코프
스코프 스코프는 식별자가 유효한 범위를 말한다. 모든 식별자는 자신이 선언된 위치에 의해 달느 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. let x = 'global'; function foo(){ let x = 'local'; console.log(x); } foo(); console.log(x); JS 엔진은 스코프를 통해 어떤 변수를 참조할지 결정한다. ※ 렉시컬 환경 코드가 어디서 실행되고 주변에 어떤 코드가 있는지 알 수 있다. 코드 문맥은 렉시컬 환경으로 이루어지고 이를 구현한 것이 실행 컨텍스트다. 모든 코드는 실행 컨텐스트에서 평가되고 실행된다. 식별자는 어떤 값을 구별할 수 있어야하므로 유일해 식별자는 중복되어서는 안된다. 하지만 스코프를 통해 유효 범위를 지정하여 스코..
2022.10.07 -
[Javascript] 함수
함수 함수는 입력과 출력이 있고 코드 블록으로 일련의 과정을 감싸 하나의 실행 단위로 정의한 것이다. function add(x, y){ return x + y; } console.log(add(2, 5)); // 7 함수 사용하는 이유 동일한 작업을 반복적으로 수행해야 할 때 재사용이 가능하고 코드 중복을 피할 수 있기 때문이다. 코드를 수정할 때도 비교적 쉽기 때문에 유지 보수성을 높이고 실수를 줄일 수 있어 코드의 신뢰성 또한 높일 수 있다. 함수 리터럴 자바스크립트에서 함수는 객체 타입의 값이다. 일반 객체와는 다른 호출할 수 있는 일급 객체이다. 숫자 값을 숫자 리터럴로 생성하듯이 함수도 함수 리터럴로 생성할 수 있다. 함수 리터럴은 다음과 같다. 함수 리터럴과 함수 선언문은 형태가 동일하다. ..
2022.10.07 -
[Javascript] 원시 값과 객체 비교
데이터 타입은 크게 원시 타입과 객체(참조) 타입으로 구분할 수 있다. 원시 타입과 객체 타입으로 구분하는 이유는 세 가지 측면에서 다르다. 원시 값은 변경 불가능한 값인 반면 참조 타입은 변경 가능한 값이다. 원시 값을 변수에 할당하면 확보된 메모리 공간에 실제 값이 저장되는 반면 객체를 변수에 할당하면 참조 값이 저장된다. → 실제로 모든 변수는 주소값을 저장한다. 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달되는 반면 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다. 원시 값 - 변경 불가능한 값 한번 생성된 원시 값은 읽기 전용 값이다. 원시 값을 변경 할 수 없다는 것과 원시 값을 저장하는 변수를 변경할 수 없다는 것과 혼동하면 안된..
2022.10.04 -
[Javascript] 객체 리터럴
자바스크립트는 객체 기반의 프로그래밍 언어로 원시 값을 제외하면 나머지 (함수, 배열, 정규 표현식 등) 모두 객체이다. 원시 타입 vs 객체 타입 원시 타입은 단 하나의 값만 나타내지만 객체 타입은 다양한 타입의 값을 하나의 단위로 구성한 자료구조다. 원시 타입은 변경이 불가능한 값이지만 객체는 변경이 가능하다. 객체 객체는 프로퍼티로 구성된 집합이다. key : value 형태로 표현되는데 모든 값들이 프로퍼티 값이 될 수 있다. 함수도 프로퍼티 값이 될 수 있는데 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라고 부른다. const counter = { num : 0, // 프로퍼티 increase : function() { // 메서드 this.num++; } }; 따라서 객체는 프..
2022.09.29 -
[JavaScript] 타입 변환과 단축 평가
타입 변환 자바스크립트의 모든 값은 타입이 있다. 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환 또는 타입 캐스팅이라 한다. var x = 10; var str = x.toString(); // 숫자를 문자열로 타입 캐스팅 console.log(typeof str); // string console.log(typeof x); // number 값의 타입이 의도치 않게 다른 타입으로 변환될 수 있다. 이를 암묵적 타입 변환 또는 타입 강제 변환이라 한다. var x = 10; var str = x + ''; console.log(typeof str); // string console.log(typeof x); // number 명시적 타입 변환이나 암묵적 타입 변환이 기존 원시 값을 직접 변경하는..
2022.09.11