값
•
식이 평가되어 생성된 결과 Value
•
10 + 10; //30
초기화
•
개발자가 명시적으로 처음 값을 할당하는 것
•
JS엔진은 선언문이 실행이 되면 암묵적으로 undefined로 할당
리터럴
•
사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법 - 생겨 먹은 대로 불리는거
•
숫자 리터럴 3
표현식 == 값
•
값으로 평가될 수 있는 문 (선언문X)
•
표현식이 평가 되면 새로운 값을 참조하거나 기존 값을 참조
// 리터럴 표현식
10
'Hello'
// 식별자 표현식(선언이 이미 존재한다고 가정)
sum
person.name
arr[1]
// 연산자 표현식
10 + 20
sum = 10
sum !== 10
// 함수/메서드 호출 표현식(선언이 이미 존재한다고 가정)
square()
person.getName()
var x; // 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다. (표현식이 아닌문)
x = 1 + 2; // 표현식이면서 완전한 문 (표현식인 문)
JavaScript
복사
값이 위치할 수 있는 자리에는 표현식도 위치할 수 있다.
표현식인 문은 값처럼 사용 가능
문 & 토큰
•
프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.
•
토큰 : 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소
var sum = 1 + 2; // 문
// var, sum, = , 1, +, 2, ; = 토큰
JavaScript
복사
// 변수 선언문
var x;
// 할당문
x = 5;
// 함수 선언문
function foo() {}
// 조건문
if(x>1) { console.log(x); }
// 반복문
for(var i = 0; i < 2; i++) { console.log(i); }
JavaScript
복사
세미콜론 ;
•
문의 종료 (세미콜론 자동 삽입 기능(ASI))
•
하지만 예측과 일치하지 않는 경우가 있어 세미콜론 사용(수동이나 포매터(Prettier 등))을 권장
function foo () {
return
{}
// ASI의 동작 결과 => return; {};
// 개발자의 예측 => return {};
}
console.log(foo()); // undefined
var bar = function () {}
(function() {})();
// ASI의 동작 결과 => var bar = function () {}(function() {})();
// 개발자의 예측 => var bar = function () {}; (function() {})();
// TypeError: (intermediate value)(...) is not a function
JavaScript
복사
런타임
•
런타임 --> 코드가 실행되는 시점
•
런타임에러 --> 사용자가 실행을 시켰을 때 에러
동적 vs 정적 언어
•
동적 타입 언어 --> 변수 선언시 변수의 타입 정보를 알려 주지 않음
•
정적 타입 언어 --> 변수 선언시 변수 타입 정보를 알려줌 (c같은거 int a) --> 메모리 절약
절차형 vs 선언형 언어
•
절차형 --> 지금까지 작성한 프로그래밍 언어
•
선언형 --> 모던 자바스크립트 환경(리액트)
•
비동기 --> 데이터를 제외한 나머지 부분을 그리고 나서 데이터가 도착하면 데이터를 그리기 시작함
가독성 > 효율
•
가독성 측면에서 함수형이 많이 권장
•
for문은 지양하자.