-
이 문제들을 다 풀면 객체지향 JavaScript, Value vs. Reference 이해 끝!problem 2020. 4. 6. 19:39
문제의 출처는 코드스테이츠에 있습니다.
Q. 코드가 실행된 후, x의 값은?
let x = 2; let y = x; y = 3;
더보기Answer : 2
원시타입 (primitive type)은 값 자체가 복사가 된다. 그래서 기존 값에는 변화를 주지 않는다.
Q. 코드가 실행된 후, x.foo의 값은?
let x = { foo: 3 }; let y = x; y.foo = 2;
더보기Answer : 2
이 경우에는 참조타입 (reference type) 이다.
콘솔에 찍어보면 x와 y의 참조주소가 같다. ( x === y 라고 뜸! )
Q. 코드가 실행된 후, x.foo의 값은?
let x = { foo: 3 }; let y = x; y = 2;
더보기Answer : 3
두번째 줄까지는 참조타입 (reference type) 이었으나,
세번째 줄 y에 원시타입 (primitive type)인 값을 대입해주었으므로
y는 더이상 x를 참조하지 않게 된다. 그러므로 foo의 값은 변화가 없다.
Q. 코드가 실행된 후, myArray의 값은?
let myArray = [2, 3, 4, 5]; let ourArray = myArray; ourArray[2] = 25; ourArray = undefined;
더보기Answer : [2, 3, 25, 5]
myArray 와 ourArray가 같은 주소값을 참조하기 때문에 ourArray를 바꾸는게 myArray를 바꾸는 것과 동일하다.
그러고나서 ourArray 에는 undefined가 들어가서 값이 바뀐다.
그렇지만 myArray는 이미 3번째 줄에 의해 2번째 인덱스 값이 바뀌었기 때문에 [2, 3, 25, 5]가 되는 것!!
Q. 코드가 실행된 후, score 의 값은?
let score = 80; function doStuff(value) { value = 90; } doStuff(score)
더보기Answer : 80
Q. 함수가 실행된 후, 콘솔에 출력되는 args의 값은?
function printMaxNums(...args) { console.log(args) } printMaxNums(10, 30, 40)
더보기Answer : [10, 30, 40]
Rest parameter로 들어가면 배열로 출력된다.
Q. 코드가 실행된 후, value값은?
let arr = [10, 30, 40, 20]; let value = Math.max(arr)
더보기Answer : NaN
함정! Math.max의 argument는 num1, num2, num3 ... 이렇게 들어가야 한다.
Q. 코드가 실행된 후, value값은?
let arr = [10, 30, 40, 20]; let value = Math.max(...arr)
더보기Answer : 40
...arr 에는 배열이 들어가면 자동으로 10, 30, 40, 20 이렇게 풀어진다!
Q. 코드가 실행된 후, value값은?
let arr = [10, 30, 40, 20] let value = [...arr]
더보기Answer : [10, 30, 40, 20]
'problem' 카테고리의 다른 글
이 문제들을 다 풀면 this 정복! (0) 2020.04.30 Jewels and Stones (Leet code - easy) (0) 2020.04.07 이 문제들을 다 풀면 scope 이해 끝 (0) 2020.04.02 closure 헷갈리는 문제 (0) 2020.04.02 Two sum (LeetCode - easy) ** 다시풀어보기! (0) 2020.03.24