x
after running the code below?NOTE! we are asking for x not the reuslt (문제는 x의 값을 묻고 있습니다)
let x = 30;
function get(x) {
return x;
}
function set(value) {
x = value;
}
set(10);
let result = get(20);
// what is the value of 'x' ?
문제는 result
에 대한 물음이 아닌, x 값 을 묻고 있음에도 불구하고 result
값을 입력해서 틀렸다.
set(10)
을 통해 x = 10
이 된다. x 는 let 등으로 선언이 되지 않았으므로 호이스팅에 의하여 전역변수인let x = 30
→ let x = 10
이 된다. 따라서 x 의 값은 10 이 된다.답 : 10
result
after running the code below?let x = 10;
function outer() {
let x = 20;
function inner() {
x = x + 10;
return x;
}
inner();
}
outer();
let result = x;
// What is the value of `result`?
outer
함수를 실행했고 해당 함수의 클로저에 x = x + 10
이 존재한다. 하지만 이것은 어디까지나 outer
스코프 내에서만 적용되지 전역에는 영향을 주지 못한다. 따라서 result 는 그대로 전역변수인 let x = 10
을 참조해 10 을 나타낸다.
답 : 10
result
after running the code below
let x = 10;
let strangeAdd = function(y) {
let x = 20;
return this.x + y;
};
let result = strangeAdd(10);
질문은 strangeAdd
함수 내의 this.x
가 가리키는 것이 무엇인가? 에서 시작한다.
참고로 함수내에서 this 의 범위는 window 를 가리킨다. 즉, 전역을 넘어 global 을 가리킨다는 것이다. let x = 10
은 전역변수이지만 그 범위가 global 에 미치지 못하고, 따라서 window 객체에 x 라는 값이 할당되지 않았으므로 result 는 NaN 을 리턴하게 된다.
만약, let x = 10
이 아니라 x = 10
혹은 var x = 10
과 같이 window 객체에 선언이 되게끔 한다면 result 값은 20 이 될 것이다.
답 : NaN
result
after running the code belowlet obj1 = { x: 10 };
let obj2 = Object.create(obj1);
let obj3 = Object.create(obj2);
obj2.x = 20;
let result = obj3.x + 10;
answer: 30
obj2 는 obj1 을 참조하고 있고, obj3 은 obj2 를 참조하고 있다. 따라서 obj2.x = 20
이 실행되기 전의 값은 다음과 같다.
obj1.x => 10
obj2.x => 10
obj3.x => 10
obj2.x = 20
이 실행되면 obj2 의 값을 참조하던 obj3 또한 그 값이 바뀌게 될 것이다.
obj1.x => 10
obj2.x => 20
obj3.x => 20
따라서 답은 30 이다.
답 : 30
retrieving the value at a specific index in a linked list
? *문제를 해석하면 "Linked List 구조에서 특정 인덱스의 값을 탐색할 때의 시간 복잡도, Big-O 는 무엇인가?" 라고 묻고 있다.
LinkedList는 순차 접근 방식을 사용한다. 특정 원소에 접근하기 위해서는 처음부터 원소에 도달할 때까지 순차적으로 검색하면서 찾기 때문에 그 원소의 양 만큼 (n 의 크기에 따라) 시간이 소요된다.
따라서 답은 0(n) Linear 시간 복잡도를 가진다고 할 수 있다.
답 : O(n) Linear