면접 질문 - 1일차(20190108)
in Study-siotz on Interview
심화 1
- 3.1 값 더 알아보기
- 3.2 함수 더 알아보기
- 3.3 함수형 프로그래밍
- 3.5 연산자 더 알아보기
- 3.6 내장 객체 및 생성자
클로저가 무엇이고 왜 쓰는지 설명하고 간단하게 코드로 구현해보아라.
함수 안에 함수가 있을 때 바깥 스코프(외부함수)의 변수를 가져다 쓰는 내부함수와, 변수를 저장하는 저장소를 클로저라고 한다.
function movie(title) { const _title = title; return function(title) { return "영화 제목은 " + _title; }; } const haw = movie("하울"); const lala = movie("라라랜드"); console.log(haw()); // 영화 제목은 하울 console.log(lala()); // 영화 제목은 라라랜드
불변성이 무엇인지와 가변성을 해결하기 위한 방법을 제시하라.
원시 타입은 값 자체를 변경할 수 없다. 이러한 성질을 불변성(immutability)라고 한다. 참조 타입은 가변성인데, 이 가변성 때문에 프로그래밍이 어려워지기도 한다. `Object.freeze`를 이용하여 객체를 얼려서 속성의 추가/변경/삭제를 막는 방법과, Immutable 라이브러리를 사용하는 방법이 있다.
화살표 함수와 일반함수와의 차이점은?
화살표 함수의 this는 호출할 때 결정되어 this가 정의되고, 일반 함수의 this는 정의하는 순간 결정되어 this가 고정되지 않는다. 일반 함수는 bind(), apply(), call()을 사용하여 this를 설정해주어야 하고, 반면에 화살표 함수는 this가 고정되어있기 때문의 위의 세가지 메소드가 동작하지 않는다.
자바스크립트에서 this는 무엇인지?
현재 실행 문맥을 가리킨다. 전역 공간에서는 window 함수 내부에서는 window 메소드 호출 시에는 메소드 호출 주체(a.map()일 경우에 주체는 a) 콜백에서는 window(하지만 this를 명시하거나 this를 바인딩해서 넘겨주면 그에 따라 바뀐다.) 생성자 함수에서는 인스턴스
== 와 === 차이
'=='는 피연산자의 타입이 다를 경우 자동으로 타입을 변환해서 비교하고, '==='는 피연산자의 타입까지 비교하기때문에 더 정확한 비교가 가능하다.
"1" == 1; // true "1" === 1; // false
호이스팅이란?
var로 선언된 변수와 일반 함수의 선언부가 제일 위로 끌어올려진다.
function foo() {}와 var foo = function() {} 사이에서 foo 사용법의 차이에 대해 설명하시오.
전자 : 함수 선언식 => 함수의 선언부가 현재 스코프의 최상단으로 호이스팅 된다. 후자 : 함수 표현식 => 변수 foo의 선언부가 현재 스코프의 최상단으로 호이스팅된다. 함수의 선언부가 아니고 foo가 선언되는 부분이 호이스팅 된다.
let, var 또는 const를 사용하여 생성된 변수들의 차이점은 무엇인가요?
var는 재대입, 재선언이 가능하고 함수 스코프를 가지며 호이스팅이 일어난다. let, const는 재선언이 불가능하고 블럭 스코프를 가지며 호이스팅이 일어나지 않는다. let은 재대입이 가능하지만 const 재대입이 불가능하다.
Function.prototype.bind에 대해 설명하시오.
this가 고정되어있지 않는 일반함수의 this를 고정할 때 사용된다.
엄격모드가 무엇이고 어떻게 사용하는 것인지?
프로그래머가 작업하면서 우발적으로 일어나는 실수들, 예를 들면 전역변수를 사용하게 되는 실수 등을 잡아준다. 코드 위에 'use strict'를 적어주면 엄격모드로 작동한다.
고차 함수의 정의는 무엇입니까?
함수를 인수로 받는 함수와 함수를 반환하는 함수를 고차함수라고 한다.
자바스크립트 원시타입은 몇 개이고 전부 말하라.
원시타입은 총 6가지이고, Boolean, Symbol, String, Number, Null, Undefined가 있다.