{
let num = 0;
while( num <= 5 ){
num++;
console.log(num);
}
}
1 2 3 4 5 6
num 변수가 0으로 초기화되고, num이 5 이하일 동안 while문이 실행된다.
조건이 맞으므로, num을 1 증가시키고 console.log 함수를 통해 출력 시킨다.
console.log 함수는 num이 1 증가된 후 출력 되기 때문에 5까지 출력 되지 않고 6까지 출력된다.
function func(){
let i = 5, j = 4, k = 1, l, m;
l = i > 5 || j != 0;
m = j <= 4 && k < 1;
document.write(l);
document.write(m);
}
func();
true false
이 문제는 논리 연산자를 사용하는 문제이다.
함수 func( ) 안에서 변수 i, j, k, l, m을 선언하고 이들 변수에 값을 초기화 한다.
논리 연산자 || (OR)과 &&(AND)를 사용하여 l과 변수에 값을 할당하고, 두 개의 논리식을 평가한다.
i=5, j=4, k=1을 각각 할당한다.
l과 m 변수는 초기화 되지 않았고, 나중에 논리 연산의 결과로 값을 할당받게 된다.
|| 논리 연산자는 두 개의 연산자 중에 하나라도 참이면 결과값이 참이 되는 연산자이다.
첫 번째 논리식(l = i > 5 || j != 0;) 에서는 변수 i가 5보다 크거나 (j의 값은 무시) j가 0이 아니어야 한다는 뜻이다.
i의 값이 5보다 크다는 것은 거짓이기 때문에 j !=0 (j는 0이 아니다.)만 판단하면 된다.
j는 0이 아니므로 이 논리식의 값은 true가 된다.
따라서 l 변수에는 참(true)가 할당된다.
&& 논리 연산자는 두 개의 연산자가 모두 참일 때 결과값이 참이 된다.
두 번째 논리식(m = j <= 4 && k < 1;)에서는 변수 j가 4보다 작거나 같지 않으며 변수 k의 값이 1보다 작아야 한다는 의미이다.
j <=4 j는 4보다 작거나 같다는 식이 참이므로, k<1도 판단해야 한다.
그러나 k는 1이므로 k<1은 거짓이 된다.
따라서 m 변수의 값은 거짓( false)가 할당된다.
{
function func(){
let i = 10, j = 10, k = 30;
i /= j;
j -= i;
k %= j;
console.log(i);
console.log(j);
console.log(k);
}
func();
}
A :
1 9 3
i /= j 는 i = i / j와 동일한 의미이다.
i의 현재 값은 10이고, j의 현재 값도 10이므로 10/10은 1이다.
따라서 i의 값은 1이 된다.
j -= i 는 j = j - i와 동일한 효과를 가지는 복합 대입 연산자이다.
j의 현재 값은 10, i(10에서 1로 값이 바뀜)의 값은 1이므로,
j(10) - i (1) = 9.
j의 값은 9가된다.
k %= j 는 k = k % j와 동일한 효과를 가지는 복합 대입 연산자이다.
%연산자는 나머지 연산자로 k(30)를 j(9)로 나눈 나머지를 k에 할당한다.
k의 현재 값은 30, j의 현재 값은 9이므로 k의 값은 3이 된다.
{
let num1 = 3;
let num2 = 7;
if(++num1 < 5 || ++num2 > 8){
console.log(num1);
}
console.log(num2)
}
4 7
먼저 num1 변수에 3을 할당하고, num2 변수에 7을 할당한다.
그 다음으로, if 문이 실행된다.
if 문의 조건식은 ++num1 < 5 || ++num2 > 8 이다.
++num1은 num1의 값을 1 증가시키고, 그 증가된 값을 반환한다.
따라서 ++num1의 결과값은 4가 된다.
||는 논리 OR 연산자로, 왼쪽 피연산자가 true이면 전체 조건식이 true가 된다.
따라서 ++num1 < 5가 false이지만, ++num2 > 8은 true가 되므로, 전체 조건식은 true가 된다.
따라서 console.log(num1)이 실행되어 num1 변수의 값인 4가 출력됩니다.
그 다음으로, console.log(num2)가 실행되어 num2 변수의 값인 7이 출력된다.
이는 ++num2가 실행되지 않았기 때문이다.
++num2는 true인 경우에만 실행되기 때문이다.
{
let num = [1, 5, 1, 2, 7, 5];
for(let i=0; i<6; i++){
if((i+1) % 2 == 0){
console.log(num[i]);
}
}
}
5 2 5
배열 num에 1, 5, 1, 2, 7, 5 값을 저장하고, 반복문을 사용하여 num의 짝수 인덱스에 해당하는 값을 출력하는 문제이다.
먼저, num 변수에 1, 5, 1, 2, 7, 5 배열을 할당한다.
그 다음으로, for 문이 실행된다.
for 문의 초기식에서는 i 변수에 0을 할당한다.
for 문의 조건식에서는 i 변수가 6보다 작은 동안 식을 반복한다.
for 문의 증감식에서는 i 변수를 1씩 증가시킨다.
반복문 내부에서는, (i+1) % 2 == 0 조건식이 실행된다.
(i+1) % 2는 i에 1을 더한 값이 2로 나누어 떨어지는지 여부를 판별하는 것이다.
이 조건식이 true인 경우에는 num[i] 값을 출력합니다.
(즉, 인덱스가 짝수인 요소들이 출력되는 것이다.)
반복문에서는 i 변수가 0부터 5까지 1씩 증가하면서, (i+2)%2==0 조건식이 참이 되는 경우에 num의 i번째 값을 출력한다.
num 배열에서 2,4,6번째 요소가 각각 5,2,5이므로 이 값들이 순서대로 출력된다.
function func(num1, num2){
if(num1 > num2) return num1
else return num2
}
console.log(func(10, 23) + func(40, 50))
73
이 문제는 두 개의 숫자 중에서 더 큰 값을 반환하여 서로 더하는 문제이다.
func 함수는 두 개의 숫자를 인자로 받는다.
만약 첫 번째 인자 num1이 두 번째 인자 num2 보다 크다면 num1을 반환하고, 그렇지 않으면 num2를 반환한다.
console.log 함수에서는 func(10, 23)과 func(40, 50) 두 번의 함수 호출 결과값을 더한다.
첫 번째 func 함수 호출에서는 num1에 10을, num2에 23을 인자로 전달한다.
num1이(10) num2(23)보다 작기 때문에 else 블록이 실행되어 num2인 23을 반환한다.
두 번째 func 함수 호출에서는 num1에 40을, num2에 50을 인자로 전달한다.
num1(40)이 num2(50)보다 작기 때문에 else 블록이 실행되어 num2인 50을 반환한다.
따라서 func(10,23) + func(40,50)은 23+50 즉, 73이 된다.