Loops: while and for
The "while" loop
while (condition) {
...
}
- condition 조건을 만족할(truthy) 동안 반복문이 실행됨
- 반복문 본문이 한 번 실행되는 것을 반복(iteration, 이터레이션)이라고 부름
- 본문이 한 줄이라면 대괄호 생략 가능
- while(true / 1) : 무한 반복문
The "do... while" loop
do {
} while (condition);
- 본문이 먼저 실행되고, 조건이 truthy인 동안 반복 실행
- 조건 결과와 상관 없이 본문을 최소한 한 번 이상 실행해야 하는 경우에 사용
The "for" loop
for (begin; condition; step) {
}
- begin : 반복문에 진입할 때 한 번 실행
- condition : 반복마다 해당 조건을 확인하여, false면 반복문 종료
- body : condition이 truthy인 동안 반복 실행
- step : body가 실행된 이후에 실행
- => 처음 begin을 실행한 후, condition과 body, step이 계속해서 반복 실행됨
Skipping parts
- for문 구성 요소 생략 가능
- begin, step
- 모든 요소를 생략하면 무한 반복문 : for(;;)
- ; 세미콜론은 생략 불가
Breaking the loop
- 일반적으로 반복문의 조건이 falsy가 되면 종료
- break 사용하여 종료 가능
Continue to the next iteration
- continue : 전체 반복문은 멈추지 않고 현재 이터레이션을 멈추고 다음 이터레이션으로 넘어감 (조건 통과)
- 중첩 레벨을 줄일 수 있음
- cf. '?'에는 문법 구조(break/continue)가 올 수 없음
Labels for break/continue
lableName : for (...) {
...
if (condition) break lableName;
...
}
- 반복문에 lableName을 부여함
- break lableName : 해당 레이블이 붙은 반복문을 종료
- continue도 가능, 레이블이 붙은 반복문의 다음 이터레이션 실행
The "switch" statement
- 복수의 if 조건문은 switch로 바꿀 수 있음
The syntax
switch(x) {
case 'value1' :
...
[break]
case 'value2' :
...
[break]
default:
...
[break]
}
- x의 값과 case문의 value1,2... 값을 비교
- 일치하는 값을 찾으면 해당 case문이 실행
- case문 안에 break문이 없으면 이어지는 case문을 계속 실행하므로 주의
- 일치하는 case문이 없다면 default문이 있는 경우 실행됨
Grouping of "case"
switch (x) {
case 1:
case 2:
alert('example');
break;
default:
alert('Bye Bye');
}
- 실행문이 같은 경우, 묶어서 사용 가능
- x의 값이 1 또는 2인 경우 같은 alert 메시지 출력
Type matters
- 비교 값과 case문의 값이 자료형까지 일치해야 함
- cf. prompt로 사용자가 입력한 값은 문자열로 반환하기 때문에 case 숫자 조건문은 일치할 수 없음
Functions
- 함수는 프로그램을 구성하는 주요 구성 요소(building block)
- 중복 없이 유사한 동작을 하는 코드를 여러 번 호출할 수 있음
Function Declaration
let outer = value;
function name(parameter1, parameter2, ... ) {
let local = value;
alert(parameter1, parameter2);
}
name(param1, param2);
- 함수 선언(function declaration) = 함수 선언문
- 정의한 함수는 함수 이름과 파라미터를 통해 호출할 수 있음
Local variables
- 함수 내에서 선언한 지역 변수(local variable)는 함수 안에서만 접근 가능
Outer variables
- 함수 내부에서 외부에서 선언한 외부 변수(outer variable)에 접근 및 수정 가능
- 함수 내부에서 외부 변수와 동일한 이름의 지역 변수가 있다면 지역 변수만 사용 가능
- 전역 변수(global variable) : 함수 외부에 선언되어 모든 함수에서 접근할 수 있는 변수, 최소한으로만 사용
Parameters
- 임의의 데이터를 함수 안에 전달 가능
- 전달된 이름으로 함수 내에서 사용함
function changeText(text){
text = 'Hello, text!';
}
let text = 'just text';
changeText(text);
alert(text);
- 함수는 전달 받은 인수(argument)를 복사하여 사용하기 때문에, 함수 내에서 변경된 사항은 외부 변수에 반영되지 않음
- A parameter는 함수 선언 시 사용되는 괄호 사이의 변수
- An argument는 함수 호출 시 사용되는 파라미터에 전달되는 값
Default values
function showMessage(from, text = "no text given") {
alert (from + " : " + text);
}
showMessage("Hello");
- 파라미터를 전달하지 않았을 때 사용되는 기본 값 설정
- 기본 값을 함수 호출로도 설정 가능
- 이외에 if문 또는 논리 연산자 ||, ??로 기본 값 설정 가능
Returning a value
function sum(a, b){
return a + b;
}
let result = sum(1, 2);
alert( result );
- 함수 호출했을 때 return을 통해 특정 값을 반환하도록 함
- return이 오면 즉시 함수가 중단되고 해당 값을 반환
- 값을 반환하지 않고 return만 사용 시 함수가 즉시 종료됨
- cf. return문이 없거나 return 지시자만 있는 함수는 undefined를 반환함
Naming a function
- 가능한 간결하고 명확하게 어떤 기능을 하는 지 알 수 있어야 함
- get... - 특정 값을 반환
- calc... - 특정 값을 계산
- create... - 특정 값을 생성
- check... - 특정 값을 확인하고 불린값 반환
- etc.
- 함수는 하나의 동작만 담당해야 함
function showPrimes(n) {
for (let i = 2; i < n; i++) {
if (!isPrime(i)) continue;
alert(i);
}
}
function isPrime(n) {
for (let i = 2; i < n; i++) {
if ( n % i == 0) return false;
}
return true;
}
- 함수를 간결하게 만들면 그 자체로 주석의 역할까지 가능
- isPrime 함수가 소수 여부를 검증한다는 것을 알 수 있음
- Self-describing code
Function expressions
Function is a value
let sayHi = function() {
alert("Hello");
};
alert( sayHi );
let func = sayHi;
func();
sayHi();
- 변수에 함수를 생성하고 할당할 수 있음
- 함수를 복사하여 다른 변수에 할당하는 것도 가능
Callback functions
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}
function showOk() {
alert("동의하였습니다.");
}
function showCancel() {
alert("취소하였습니다.");
}
ask("동의하십니까?", showOk, showCancel);
- 함수를 함수의 인수로 전달하여 필요한 경우 나중에 호출(called back)하는 것이 콜백 함수
- showOk, showCancel
- 이름 없이 선언한 함수는 익명 함수(anonymous function)
- ask(...) 안에 함수 선언
Function expression vs Function Declaration
- 문법 (the syntax)
- 함수 선언문(function declaration) : 주요 코드의 흐름 중간에 독립된 구문으로 존재
- 함수 표현식(function expression) : 표현식이나 구문 구성(syntax construct) 내부에 생성
- 생성 시점 (when a function created by the JavaScript engine)
- 선언문은 위치와 상관 없이 어디서든 사용 가능
- 자바 스크립트는 준비 단계에서 전역에 선언된 함수 선언문을 찾아 생성하기 때문
- 표현식은 코드의 실행 흐름이 해당 함수에 도달했을 때 생성하여 사용 가능
- 스코프 (block scope)
let age = 16;
if (age < 18) {
welcome();
function welcome(){
alert("Hello!");
}
welcome();
} else {
function welcome() {
alert("Hi, hello");
}
}
welcome();
let age = prompt("나이를 입력하세요.");
let welcome;
if (age < 18) {
welcome = function() {
alert("Hello");
};
} else {
welcome = function() {
alert("Hi, hello");
};
}
welcome();
- 일반적으로 함수 선언문을 이용해 선언하는 것을 권장
- 코드를 유연하게 구성할 수 있고, 가독성에도 좋음
- 필요한 경우 함수 표현식으로 사용
Arrow functions, the basics
let func = (arg1, arg2, ... argN) => expression
let func = arg1 => expression
let func = () => expression
- 화살표 함수(arrow function) : 함수의 축약 버전
- 인수(파라미터)가 하나인 경우 괄호도 생략 가능
- 인수가 없을 때는 괄호 생략 불가
Multiline arrow functions
let sum = (a, b) => {
let result = a + b;
return result
};
alert ( sum(1, 2) );
- 표현식이 여러 줄인 경우 중괄호 {}로 코드를 묶고, return 지시자로 결과값을 반환해야 함
JavaScript specials
Code structure
- 여러 개의 구문은 세미콜론을 기준으로 구분함
- 줄바꿈으로 세미콜론 자동 삽입(automatic semicolon insertion)이 동작하지만, 권장하지 않음
Strict mode
- 모던 자바스크립트에서 지원하는 모든 기능을 활성화하기 위한 모드
- 'use strict' : 스크립트나 함수 최상단에 위치해야 함
Variables
- 변수 타입 3가지
- let
- const : 한 번 값을 할당하면 바꿀 수 없는 상수
- var : 과거에 주로 사용된 키워드
- 변수 이름 규칙
- 숫자와 문자 사용, 첫 글자는 숫자 불가
- 특수기호 $, _ 만 사용 가능
- 비 라틴계 언어나 문자도 사용할 수는 있지만 권장하지 않음
- 기본 자료형 8가지
- 숫자형 : 정수와 부동 소수점
- BigInt형 : 아주 큰 숫자
- 문자형 : 문자열
- 불린형 : true/false
- null : 비어있음, 존재하지 않음
- undefined : 값이 할당되지 않은 상태
- 객체형 : 복잡한 자료구조
- 심볼형 : 고유한 식별자
- cf. typeof : 값의 자료형 반환
Interaction
- 호스트 환경이 브라우저인 경우, 사용자와 상호작용 가능
- prompt(question, [default])
- 사용자가 입력한 값을 반환, 취소 버튼은 null
- confirm(question)
- alert(message)
Operators
- 산술 연산자
- 사칙연산(+,-,*,/)과 나머지 %, 거듭제곱 ** 등
- 할당 연산자
- 비트 연산자
- 조건부 연산자 (삼항 연산자)
- 논리 연산자
- nullish 병합 연산자 ??
- 비교 연산자
- 일치 연산자 ===
Loops
- while
- do-while
- for
- cf. break, continue
The "switch" construct
- 조건에 해당하는 case문 실행
- 내부적으로 일치 연산자 === 사용하여 비교
- if-else if문으로 바꿀 수 있음
Functions
- 함수 선언문 : 주요 코드 흐름의 하나로 선언
- 함수 표현식 : 표현식 형태로 변수에 할당하여 선언
- 화살표 함수 : 축약형
- 함수는 지역 변수를 가짐, 함수 내부에서만 접근 가능
- 파라미터의 기본값 설정 가능
- 항상 반환값이 있어야 함 (return), 없으면 undefined
"JavaScript Fundamentals", by Ilya Kantor, 2007-2022, https://javascript.info/first-steps