사실 명시적으로는 var, let, const, func, func*, class키워드를 사용한 모든 선언문이 호이스팅 된다. 모든 선언문은 런타임이전에 실행되기 때문에 호이스팅은 선언문이 존재하는 이상 항상 발생한다. 추가로 var과 같이 예외적으로 런타임이전에 초기
표현식은 값으로 평가될 수 있는 문이다. 그래서 값인 것 같아 보이면 그게 표현식이라고 생각하면 된다. 위 코드에서 1도 표현식이다. #1 var tmp; #2 tmp = 1; #3 var usage #1는 #3에 할당시킬 수 없다. 그래서 #1은 표현식이 될
자바스크립트는 변수에 타입을 미리 지정하지 않는다. 변수에 할당되는 값에 의해 타입이 바뀐다는 뜻이다. 이를 동적 타입이라고 한다. 자바스크립트는 동적 타입 언어다. 자바스크립트에서 타입은 변수에 할당된 값에 의해 결정(추론) 되기 때문에, 값에 의한 타입 예측에
문자열도 원시 타입이다. 하지만 이런 개념을 알기 전에 코딩테스트 문제를 풀면서 궁금했지만 그냥 넘어갔던 상황이 있었다. 문자열도 배열처럼 .length 프러퍼티를 쓸 수 있고, str.[0]과 같이 인덱스 접근이 가능한데 str.[0] 값을 직접 변경할 수 없던 점이
함수 선언문은 var키워드 선언처럼 런타임 이전에 초기화가 돼서 호이스팅이 이루어진다. 그치만 구분을 짓기 위해 함수 호이스팅 이라고 부른다. 함수 선언문은 런타임 이전에 위 코드의 예시로 add라는 이름을 가지는 식별자가 암묵적으로 생기고, 함수 객체를 할당한다.
렉시컬 스코프는 상위 스코프의 결정 방식 중 하나를 의미하고, 자바스크립트는 이를 따른다. 함수를 정의하고 호출하는 코드가 있다고 가정했을 때, 프로그래밍 언어는 함수의 상위 스코프 결정에 있어서 이를 정의하는 방식이 필요하다. 스코프 결정 방식은 함수가 호출되는
변수의 선언을 배우면서, 모든 선언문은 런타임 이전(코드 평가 기간)에 실행된다고 배웠다. 하지만 이것은 전역 변수에 한정된 것이기 때문에, 이제는 함수 내부 지역 변수에서의 선언을 알아야 한다.위의 코드에서 런타임 이전에 실행되는 선언문은 전역 tmp와 fin함수 이
객체를 리터럴로 생성하는 방법이다. 빈 객체를 리터럴로 생성하기 위해서는 중괄호 {}를 변수에 할당하면 된다. 하지만 객체의 중괄호는 코드 블록을 의미하지 않는다. 코드 블록문은 문의 종료를 의미하는 자체 종결성을 가지고 있어서 예를 들면 함수의 중괄호나 제어문의
객체 리터럴을 보완하고자 생성자 함수를 호출하여 여러 개의 인스턴스를 생성한다고 했다.사용자에 입장에서는 이 부분이 효율적이지만, 컴퓨터의 입장에서는 여전히 사용자의 호출 횟수 만큼 프러퍼티나 메서드들이 중복되어 생성되어져 메모리 낭비라는 문제가 발생한다.이런 메모리
실수로 함수 안에서 선언되지 않은 변수에다가 어떤 값을 할당했다고 가정해보자. 전역 스코프에도 해당 변수의 선언이 존재하지 않기 때문에 참조에러를 뱉을거같은데, JS엔진은 전역 객체에다가 그 변수를 프러퍼티로 동적으로 생성해버린다. 그렇기 때문에 에러가 발생하지 않고
바인딩은 식별자( 변수 )와 값을 연결하는 과정을 말한다. 그래서 변수의 선언은 변수 이름이 확보된 메모리 공간의 주소를 바인딩하는 것이다. 어떤걸 가리킨다고 말해도 되고, 참조한다고 말해도 된다. 여기서는 this가 주인공이니까 this바인딩을 소개한다. 우선 thi
클로저는 함수형 프로그래밍 언어에서 사용되는 특성이다.클로저를 이해하기 위한 핵심 키워드는 함수가 선언된 렉시컬 환경이다. 함수는 상위 스코프를 정할 때 렉시컬 스코프 방식을 따른다.함수가 실행 될 때 함수의 상위 스코프가 결정되고,생성된 함수 객체는 결정된 상위 스코
클래스는 인스턴스를 생성하기 위한 생성자 함수이다.그래서 함수로 평가되기 때문에 함수의 호이스팅과 같다.클래스 내부에는 생성자, 프로토타입, 정적 이렇게 총 3가지의 메서드를 정의할 수 있다.클래스는 내부에 constructor메서드를 무조건 정의해야 한다.constr