하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름(값의 위치를 가리키는 상징적인 이름)
변수를 포함한 모든 식별자(함수, 클래스)를 사용하려면 선언이 필요하며 선언하지 않은 식별자에 접근하면 ReferenceError(참조 에러)가 발생한다.
ReferenceError(참조 에러) = 식별자를 통해 값으 참조하려 했지만 자바스크립트 엔진이 등록된 식별자를 찾을 수 없을 때 발생하는 에러
console.log(score); 👉 undefined var score; 👉 변수 선언문
자바스크립트 코드는 한 줄씩 순차적으로 실행되므로 console.log(score);가 실행되는 시점에는 아직 score변수 선언이 실행되지 않았으므로 undefined가 출력된다.
❗️ 그런데 참조에러가 아닌 undefinde가 출력되는 이유는 뭘까?
🤓 변수 선언이 소스코드가 한 줄씩 순차적을 실행되는 시점(런타임)이 아니라 그 이전 단계에서 먼저 실행되기 때문이다.즉, 자바스크립트 엔진은 변수 선언이 소스코드의 어디에 있든 상관없이 다른 코드보다 먼저 실행한다.
따라서 변수 선언이 소스코드 어디 위치하는지 상관 없이 어디서든 변수를 참조할 수 있다.
변수 호이스팅 : 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징
console.log(score); 👉 undefined score = 80; 👉 값의 할당 var score; 👉 변수 선언 console.log(score); 👉 ??????
✍️ 내가 생각한 결과 : 80이라는 값이 출력될 것 같다. why? 선언은 런타임 이전에 먼저 실행되어 런타임에 실행되는 할당보다 먼저 실행되기 때문에 값이 나올 것 같다.
🤔 const가 let과 다른 점이 있다면, 반드시 선언과 초기화가 동시에 진행되어야 한다.
예시 >
var first-name; 👉 '-' 하이픈 사용 ⓧ var 1st; 👉 숫자로 시작 ⓧ var this; 👉 예약어 사용 ⓧ
리터럴의 종류 👉 정수, 문자열, 불리언, null, undefined, 객체, 배열, 함수, 정규 표현식, 부동소수점, 2진수, 8진수, 16진수
👉 리터럴 표현식 10 'HELLO' 👉 식별자 표현식(선언이 이미 존재한다고 가정) sum person.name arr[1] 👉 연산자 표현식 10 + 20 sum = 10 sum !== 10 👉 함수/메서드 호출 표현식(선언이 이미 존재한다고 가정) square() person.getName()
예 👉 키워드, 식별자, 연산자, 리터럴, 세미콜론, 마침표 등
표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단하고 명료한 방법은 변수에 할당해 보는 것이다.
var foo = var x; 👉 표현식이 아닌 문은 값처럼 사용ⓧ var x; 👉 변수 선언문은 표현식이 아닌 문이다. x = 100; 👉 할당문은 그 자체 표현식이지만 완전한 문이기도 하다. 즉 할당문은 표현식인 문이다. 🙆♀️
원시타입 : 숫자, 문자열, 불리언, undefined, null, symbol
객체타임 : 함수, 배열, 객체 등
\' 따옴표 single quote \" 쌍따옴표 double quote \\ 역슬래시 single backslash \b 백스페이스 backspace \r 캐리지 리턴 carriage return \n 줄바꿈 newline \s 스페이스 space \t 수평탭 tab \v 수직탭 tab \f 폼피드 form feed \0 null
예 >
var template = `<ul>\n\t<li><a href = "#">Home</a></li>\n<ul>`;
👇 출력 결과
<ul> <li><a href = "#">Home</a></li> </ul>
var first = 'sujeong'; var last = 'Lee'; console.log('My name is' + first + '' + last +'.'); 👉 ES5 문자열 연결
👇
var first = 'sujeong'; var last = 'Lee'; console.log(`My name is ${first} ${last}.`}; 👉ES6 문자열 연결
var key = Symbol('key'); 👉 심벌 값 생성
var obj; 👉 객체 생성
obj[key] = 'value'; 👉 이름이 충돌할 위험이 없는 유일무이한 값인 심벌의 프로퍼티 키를 사용한다.
console.log(obj[key]);
표현식, 값, 문, 데이터 타입, 리터럴 등 물어 봤을때 설명 가능할 수 있게 공부하자. 정확한 개념을 모르게 사용했던 자바스크립트 구조에 대해 알게 되었고 템플릿 리터럴, 심벌 타입 등 낯선 내용도 배웠다.
스터디에서 아직 헷갈리는 표현식과 문에 대해 더 자세히 공부해야겠다.🧐