구글링하여 나오는 프로트엔드 면접 질문들을 정리해 보았습니다!
1.주소창에 구글을 입력한다
2.구글 서버로 찾아간다
3.DNS가 연결해줄 곳을 찾는다 (DNS - 실제 서버가 어디있는지 알고 있는 서버)
4.서버에서 HTML 파일을 클라이언트로 보낸다
5.HTML 파일 파싱 및 DOM Tree 생성
6.link 태그를 만나면 css 파싱 및 CSSOM 트리 생성
7.DOM , CSSOM 합쳐 Render Tree 생성
8.7번 과정 중 JavaScript를 만난다면 HTML파서는 JS 코드를 실행하기 위해 파싱을 중단 한 후 JS 엔진에게 권한을 넘기고 JS 엔진은 실행되어 Js 코드 또는 파일을 로드해서 파싱하고 실행한다
유효 범위: 함수 블록 {} 안에서 유효
실제로 코드가 끌어올려지는 건 아니며, 자바스크립트 Parser 내부적으로 끌어올려서 처리하는 것이다.**
실제 메모리에서는 변화가 없다.
var 변수/함수의 선언만 위로 끌어 올려지며, 할당은 끌어 올려지지 않는다
let/const 변수 선언과 함수표현식에서는 호이스팅이 발생하지 않는다
수정!
let과 const는 호이스팅이 되지만 TDZ(Temporal Dead Zone)에 의해 에러가 발생합니다.
let/const 변수의 경우 var 변수와 다르게 변수의 선언 단계와 초기화 단계 사이에 일시적 사각 지대(TDZ)가 존재하고, TDZ에서 관리 중일 때(let 변수의 선언 또는 const 변수의 선언 및 할당 코드가 나오기 전)사용하려 한다면 ReferenceError를 발생 시킴
//var
console.log(a); // undefined
a = 3;
console.log(a); // 3
var a = 1;
console.log(a); // 1
//const
const a = 1;
{
console.log(a);
//Uncaught ReferenceError: Cannot access 'a' before initialization
const a = 2;
}
사용하는 이유
현재 상태를 기억하고 변경된 최신 상태를 유지하기 위해
전역 변수의 사용을 억제 하기위해
정보의 캡슐화와 은닉화
margin은 Object와 화면과의 여백(외부여백)을 말하며 padding은 Object내의 내부여백을 의미합니다.
static (기본값) :위치를 지정하지 않을 때 사용한다.
relative : 위치를 계산할때 static의 원래 위치부터 계산한다.
absolute : 원래 위치와 상관없이 위치를 지정할 수 있다. 단, 가장 가까운 상위 요소를 기준으로 위치가 결정 된다.
fixed : 원래 위치와 상관없이 위치를 지정할 수 있다. 하지만 상위 요소에 영향을 받지 않기 때문에 화면이 바뀌더라도 고정된 위치를 설정 할 수 있다.
sticky : 위치에 따라서 동작방식이 달라짐. 요소가 임계점(scroll 박스 기준) 이전에는 relative와 같이 동작. 그 이후에는 fixed와 같이 동작.
GET
정보를 가져와서 조회하기 위해서 사용되는 방식
URL에 변수(데이터)를 포함시켜 요청한다.
데이터를 Header(헤더)에 포함하여 전송한다.
URL에 데이터가 노출되어 보안에 취약하다.
캐싱할 수 있다.
POST
데이터를 서버로 제출하여 추가 또는 수정하기 위해서 사용하는 방식
URL에 변수(데이터)를 노출하지 않고 요청한다.
데이터를 Body(바디)에 포함시킨다.
URL에 데이터가 노출되지 않아서 기본 보안은 되어있다.
캐싱할 수 없다.
결정적 차이는 보안이다.
1. http방식은 네트워크상에서 정보를 누군가가 마음대로 열람, 수정이 가능하다. https는 누가 볼수없도록 막음.
2. http방식이 https방식보다 빠르다.
3. http방식은 민감한정보를 다룰 때 항상 변조, 해킹 가능성을 생각해야한다. https는 설치 및 인증서를 유지하는데 추가적인 비용이 발생. -> 따라서, 민감한 정보가 있는 페이지의 경우 Https 그럴필요가없으면 http로 만들면 된다.
Object Oriented Programming 객체지향 프로그래밍이라고한다. 특징은 크게 4가지가 있다.
1. 상속 : 클래스개념에서 상위 클래스(부모)로 부터 하위 클래스(자식)이 유산을 물려받는것과 같이, 부모의 메소드나 변수를 사용할 수 있는 것을 말함.
2. 다형성 : 같은 함수가 있다고 칠때 그 함수가 매개변수에 따라 다른 역할을 할 수 도 있다.
3. 캡슐화 : 보통 데이터를 은닉시킨다고 표현하는데, 외부에서 쉽게 데이터를 접근할 수 없게 만들기도하고, 데이터 구조와 데이터를 다루는 방법들을 한데다 묶는것.
4. 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것
( a b c 이런게있다고 치면 이런건 알파벳이라고 묶을 수 있다)
자바스크립트를 이용해 비동기적으로 서버와 브라우저가 데이터를 교환할 수 있는 통신 방식
보통은 서버로부터 웹페이지가 반환되면 전체를 갱신해야하는데 AJAX를 사용하면 페이지 일부만을 갱신하고도 동일한 효과를 볼 수 있다. 즉, 갱신이 필요한 부분만 로드하여 갱신하면 되므로 빠르고 부드러운 화면효과를 기대할 수 있음
다른언어에는 int,double등 숫자타입의 다양함이 있지만 js는number 하나만 있다.
정수만을 위한 타입이 없고, 모든 수를 실수로 처리한다.
boolean, string, number, undefined , null , symbol 이렇게 6가지 종류
undefined는 선언만 되어있고 값은 없는 상태 , null은 자료형이 객체이며 빈값을 의미
+BigInt
BigInt는 임의의 정밀도로 정수를 나타낼 수있는 JavaScript의 새로운 숫자 데이터형입니다.
BigInt를 사용하면 숫자에 대한 안전한 정수 제한을 초과하여 큰 정수를 안전하게 저장하고 조작 할 수 있습니다.
Chrome 67의 새로운 기능으로 최근에 업데이트 되었습니다.
1.기본 바인딩(전역객체)
this가 전역 객체(window)를 context 객체로 갖는 것
2.암시적 바인딩
어떤 객체를 통해 함수가 호출된다면 그 객체가 바로 this의 context 객체가 된다.
3.명시적 바인딩
함수(함수 객체)는 call, apply, bind 메소드를 가지고 있는데, 첫번째 인자로 넘겨주는 것이 this context 객체가 된다.
4.new 바인딩
1-새 객체가 만들어짐
2-새로 생성된 객체의 Prototype 체인이 호출 함수의 프로토타입과 연결됨
3-1에서 생성된 객체를 this context 객체로 사용(명시적으로)하여 함수가 실행됨
4-이 함수가 객체를 반환하지 않는 한 1에서 생성된객체가 반환됨
5.Arrow Function
Arrow Function이 선언된 부분 스코프의 this context를 this context로 사용한다.
조금씩 추가하겠습니다!
틀린부분은 댓글에 남겨주세요!
잘 봤습니다!!
자주 오해하는 부분이 있어서 댓글남겨요!
let과 const는 호이스팅이 됩니다. 다만 TDZ(Temporal Dead Zone)에 의해 에러가 발생합니다!!
10번 타입중에 bigint도 있습니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/BigInt
this에 대해서 조금 더 자세하게 설명해주실수있나요?