// 문제 : 전역변수와 지역변수에 대하여 설명하라
// 답안 : 전역변수는 글로벌하게 쓰일 수 있는 변수로서, 전역 스코프 상에서
// let이나 const등으로 어떠한 값을 선언하면 그것은 그 전역 내에서 모두 사용이 가능하다.
// 반면에, 지역변수로 선언하게 되면 그것을 선언한 지역 스코프 내에서만 사용이 가능하다.
// 예시를 들면, 만약 어떠한 함수 내에서 let a = 3; 이라고 선언한다고 해도
// 그 함수를 벗어난 상태에서 console.log(a); 를 하려고 해도 그 3이라는 값은 출력되지 않는다.
// 왜냐하면 여기서 a는 지역변수로 선언된 것이기 때문이다.
// ------------------------------------------------------------------------------
// 문제 : 함수 선언식, 표현식, 애로우 함수에 대하여 예시코드를 작성하고 차이점을 설명하라.
// 답안 :
// Function Declaration의 예시는 다음과 같다. 함수 선언식이라고도 부른다.
function temp1(a, b) {
return a + b;
}
// Function Expression의 예시는 다음과 같다. 함수 표현식이라고도 부른다.
const temp2 = function (a, b) {
return a + b;
};
// Arrow Function의 예시는 다음과 같다. 화살표 함수라고도 부른다.
const temp3 = (a, b) => {
return a + b;
};
// 선언식과 표현식의 차이점이라고 한다면, 표현식의 경우 뒤에 들어가는 함수는
// 무명함수라고 할 수 있다. 실제로 function name이 지정이 안 돼있다.
// 화살표 함수의 경우 간편하게 짧게 함수를 표현할 때 주로 사용한다.
// callback 함수 등에 함수를 지정할 때, 애로우 함수를 자주 사용하게 된다.
// 애로우 함수의 경우 this를 사용하게 되면 this가 가르키는 object가 자신이 선언된 곳의
// object를 가르키게 된다. 반면에 표현식과 선언식은 알아서 bind가 들어가서 지정해주게 된다.
// ------------------------------------------------------------------------------
// 문제 : 다음과 같은 코드가 있을 때, 출력되는 결과와 그 이유를 서술하라.
// 답안 (1번코드) : 1번 코드의 경우 x라는 변수에 10을 할당하였다. 그래서 함수 foo를 호출하게 되면
// 결과는 10이 출력된다. 함수 내에서 console.log(x); 아래에 var x = 20; 이라고 나와있어도
// 이는 console.log(x);를 수행한 후에 실행되므로, 20이라는 값이 출력되지 않고 10이 출력되는 것이다.
// 답안 (2번코드) : for문을 이용하여 i는 0부터 4까지 총 5번 시행되게 된다. for문이 빠르게 5번 돌게되고
// setTimeout이라는 함수도 i는 0부터 4까지 총 5번 시행되게 되는데, 매우 빠른 속도로 실행된다.
// 그래서 결국, 1초 후에 0부터 4까지 순차적으로 거의 동시에 출력되게 된다.
// (즉, 0부터 4까지 1초 간격으로 출력되는 것이 아니라는 것이다.)
// ------------------------------------------------------------------------------
// 문제 : 그 문자가 시작하는 index를 반환하는 코드를 작성하라.
// 답안
function find(text, search) {
result = text.indexOf(search);
return result;
}
let str = "pineapple is yummy";
console.log(find(str, "apple"));
// ------------------------------------------------------------------------------
// 문제 : 행렬 2개가 주어졌을 때 곱해주는 코드를 작성하라. (곱할 수 없다면 -1을 출력하도록 하라)
// 답안
function mul(a, b) {
if (a[0].length !== b.length) {
return -1;
}
let x = a[0][0] * b[0][0] + a[0][1] * b[1][0];
let y = a[0][0] * b[0][1] + a[0][1] * b[1][1];
let z = a[1][0] * b[0][0] + a[1][1] * b[1][0];
let k = a[1][0] * b[0][1] + a[1][1] * b[1][1];
result = [
[x, y],
[z, k],
];
return result;
}
const matrix1 = [
[1, 2],
[2, 4],
];
const matrix2 = [
[1, 0],
[0, 3],
];
console.log(mul(matrix1, matrix2));
// ------------------------------------------------------------------------------
// 문제 : 사칙연산을 수행하는 계산기를 구현하라
// 답안
function calculator(num1, num2, how) {
if (how === "+") {
return num1 + num2;
} else if (how === "-") {
return num1 - num2;
} else if (how === "/") {
return num1 / num2;
} else if (how === "*") {
return num1 * num2;
}
}
console.log(calculator(5, 2, "/"));