기술 면접을 준비하다 찾아본 자료입니다.
오역이나 내용이 다르다 싶으면 댓글로 알려주세요. 😊
참고 > https://www.zuaneducation.com/blog/front-end-developer-interview-questions-and-answers/
위에 언급된 기술을 제외하고, 아래에 언급 된 경험들을 가져야 합니다.
참고 >
https://www.theteams.kr/teams/1044/post/64872
https://mulder21c.github.io/2019/01/30/what-is-cross-browsing/
https://server-talk.tistory.com/25
참고 > https://bblog.tistory.com/299
float는 객체를 띄어 정렬하는 속성인데, 적용하면 이후에 오는 글자나 다른 요소들은 그 사진 주위로 둘러싼 형태가 됩니다. 둘러싼 형태를 해제하기 위해 clear를 사용합니다.
callback 함수는 이전 코드가 완전히 실행 될 때까지 호출되지 않기 때문에 이러한 현상이 발생하지 않도록 사용합니다. 즉, 비동기 (Asynchronous) 방식의 함수로 사용됩니다.
JavaScript의 상속은 대부분의 다른 프로그래밍 언어와 다릅니다.
JavaScript의 객체 시스템은 class 기반이 아닌 prototype 기반으로 만들어졌습니다.
JavaScript의 객체는 키 값 쌍의 집합일 뿐입니다. 상속과 관련하여 JavaScript에는 객체라는 하나의 구성만 있습니다.
prototype에는 prototype link와 prototype object로 구성되어있습니다.
참고 > https://mygumi.tistory.com/312
Host Object
(사용자 정의 객체)constructor
혹은 객체 리터럴을 통해 사용자가 객체를 정의하고 확장시켰기에 Built-in Object
와 Native Object
가 구성된 이후에 구성됩니다.Native Object
(브라우저 내장 객체)Native Object
를 사용함에 있어서 구성을 다르게 하기에 분류 되었습니다.Built-in Object
(자바스크립트 내장 객체)Object, String, Number
등 많은 내장객체들이 있습니다.참고 > http://insanehong.kr/post/javascript-object/
HTML | XHTML |
---|---|
종료태그 생략가능 | 종료태그 생략불가능 |
요소명과 속성명에 대소문자 사용가능 | 요소명과 속성명에 대문자 사용불가능 |
빈요소 사용시 </> 사용하지 않음 | 빈요소 사용시 </>사용 |
속성에 속성값 생략 가능 | 속성에 속성값 생략 불가능 |
인호(" ")부호 생략 가능 | 인호(" ")부호 생략 불가능 |
<?xml-stylesheet type="text/css" href="style.css" media="screen"?>
<!--...-->
코멘트로 스타일이나 스크립트의 일부를.innerHTML
속성을 사용할 수 없습니다.참고 >
https://jjeongeun.tistory.com/2
http://blog.wystan.net/2007/05/24/xhtml-vs-html
참고 > https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/
Null은 값이 없는 상태입니다. Undefinded도 값이 없습니다. 그렇다면 차이점은 무엇일까요?
const test1 = null;
console.log(typeof test1);
결과 값
object
---------------------------
const test2 = undefinded;
console.log(typeof test2);
결과 값
undefinded
타입이 다른 것을 볼 수 있습니다.
Undeclared
는 선언하지 않은 변수, 정확히는 유효범위를 지정하지 않은 변수라고 볼 수 있습니다.
DOCTYPE은 페이지에 어떤 버전의 markdown 언어가 작성되었는지에 대한 웹 브라우저의 지시사항입니다.
브라우저가 내용을 올바르게 해석할 수 있도록 표시 언어 규칙을 제공합니다.
공통점은 key-value로 데이터가 브라우저에 저장됩니다.
참고 > https://www.zerocho.com/category/HTML&DOM/post/5918515b1ed39f00182d3048
사용자가 웹 사이트를 열면 해당 페이지의 콘텐츠들이 렌더링 됩니다.
사용자가 모든 컨텐츠를 실제로 본다는 보장이 없기에, 웹사이트에서는 메모리 및 대역폭 낭비가 발생합니다.
Lazy Loading을 사용하게 되면 모든 콘텐츠를 대량으로 로드하는 대신, 사용자가 페이지의 일부에 접근했을 때 콘텐츠를 로드하여 메모리 및 대역폭 낭비를 줄일 수 있습니다.
참고 > https://scarlett-dev.gitbook.io/all/it/lazy-loading
Event Delegation (이벤트 위임)은 각 노드에 대해 이벤트를 추가하지 않고, 상위 노드에서 하위 노드의 이벤트를 제어하는 프로세스입니다.
Event Delegation을 적용할 때 주의 해야할 점은 필요없는 하위 요소가 있을 경우, 불필요한 이벤트가 발생할 수 있기 때문에, 이 부분에 대해서는 따로 이벤트 처리를 해줘야합니다.
Ajax(비동기 JavaScript 및 XML)를 사용하면 페이지를 새로 고치지 않고 서버에서 비동기식으로 데이터를 전송할 수 있습니다. 즉, 전체 페이지를 다시 로드하지 않고 웹 페이지의 일부를 업데이틀 할 수 있습니다. 예를 들어, 웹 페이지를 새로 고치지 않았더라도 새 Gmail 메시지가 도착하고 새 메시지가 웹사이트에 표시됩니다.
<span>
태그와 같습니다.<div>
와 <p>
와 같은 블록 요소로 표시됩니다.특정 화면 요소에서 이벤트가 발생했을 때 해당 이벤트가 더 상위의 화면 요소들로 전달되어가는 특성을 의미합니다. 즉, 하위에서 상위로 Event Propagation이 된다고 보면 됩니다.
내부함수가 외부함수의 context에 접근 할 수 있고, 외부함수는 외부함수의 context를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는 특성을 의미합니다.
아래의 예제는 자주 언급되는 예제입니다.
var arr = [];
for (var i = 0; i < 5; i++){
arr[i] = function() {
return i;
}
}
for (var index in arr) {
console.log(arr[index]());
}
함수가 외부함수의 지역변수인 i
를 접근하는 것으로 0,1,2,3,4
결과를 기대하겠지만, 실행해보면 5,5,5,5,5
가 실행됩니다. 그 이유는 arr[index]()
에는 return i;
가 저장되어있지만 이미 i
는 for문을 끝냈기 때문에 5라는 값을 가지고 있어 5가 반환되는 것입니다.
따라서 아래와 같이 변경해야 합니다.
var arr = [];
for (var i = 0; i < 5; i++) {
arr[i] = function(id){
return function(){
return id;
}
}(i);
}
for(var index in arr){
console.log(arr[index]());
}
이렇게 하면 원하는 0,1,2,3,4
가 나옵니다.
const arr = [];
for(let i = 0; i < 5; i++){
arr[i] = function(){
return i;
}
}
for(let index in arr){
console.log(arr[index]());
}
혹은 es6 변수 선언 방식으로, const
와 let
을 사용해서 문제를 해결 할 수도 있습니다.
참고 > https://opentutorials.org/course/743/6544
var
는 Function Scope, let
, const
는 Block Scope 입니다.
Function Scope는 함수 단위, Block Scope는 { } (중괄호) 단위 입니다.
var
를 사용하면 변수 선언의 경우 할당되는 값이 유동적으로 변경될 수 있습니다.
var name = 'HeumHeum2';
console.log(name);
var name = 'JoJo';
console.log(name);
output: HeumHeum2
output: JoJo
위의 예시처럼 name이라는 변수를 한번 더 선언했음에도 불구하고, 에러없이 출력되는 모습을 볼 수 있습니다.
es6 업데이트 이후로 추가된 let
, const
를 살펴보겠습니다.
let name = 'HeumHeum2';
console.log(name);
let name = 'JoJo';
console.log(name);
output : Identifier 'name' has already been declared
위의 예시처럼 name이 이미 선언되었다는 에러 메시지를 볼 수 있습니다.
const
도 마찬가지로 변수 재선언이 안된다는 특징을 가지고 있습니다.
그렇다면 let
과 const
는 어떤 차이가 있을까요?
바로 immutability
여부입니다.
let
은 변수에 재할당이 가능하지만, const
는 변수 재선언, 재할당 모두 불가능합니다.
즉, 상수로 선언한다고 생각하면 될 것 같습니다.
let test = 'letTest'; // output : letTest
test = 'letTest2'; // output : letTest2
const test = 'constTest'; // output : constTest
test = 'constTest2'; // TypeError: Assignment to constant variable.
참고 >
https://velog.io/@marcus/2019-02-10-1702-작성됨
https://medium.com/@khwsc1/번역-자바스크립트-스코프와-클로저-javascript-scope-and-closures-8d402c976d19