변수 선언 방식
var: function-scoped, 재선언 가능, hosting으로 인해 선언 전에 변수 호출 가능
let: 재할당 가능
const: 재할당 불가능
undeclared, undefined, null의 차이
undeclared: 선언되지 않은 변수에 할당 시도
undefined: 선언은 되었지만 할당되지 않음
null: null 값이 명시적으로 할당
렉시컬 스코핑과 클로저
렉시컬 스코핑: 스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다.
클로저: 자신을 포함하고 있는 외부함수보다 내부함수가 더 오래 유지되는 경우, 외부함수 밖에서 호출되더라도 외부함수의 지역변수에 접근할 수 있는 것 => 자신이 생성될 때의 환경(Lexical Environment)을 기억하는 함수
foreach와 map
foreach
- 배열의 요소 반복
- 각 요소에 대해 콜백을 실행
- 값을 반환하지 않음
map
- 배열 요소를 반복
- 각 요소에서 함수를 호출하여 결과로 새 배열을 작성하여 각 요소를 새 요소에 매핑
차이점
- map은 새로운 배열을 반환
- 결과가 필요하지만 원본 배열을 변경하고 싶지 않으면 map을 사용
- 단순히 배열을 반복한다면 foreach 사용
익명 함수를 사용하는 이유
한 번 사용되고 다른 곳에서 사용할 필요가 없는 경우 => 코드가 독립적이고 읽기 쉬움
내장 객체와 호스트 객체
내장 객체: ECMAScript 사양에 정의된 javascript 언어의 일부인 객체(String, Math, RegExp, Object, Function)
호스트 객체: Window, XMLHttpRequest
공통점 | 차이점 | |
.call과 .apply | - 함수를 호출하는데 사용 - 첫번 째 매개변수는 this의 값으로 사용 |
- 쉼표로 구분된 인수를 두번 째 인수로 취함 - 인수의 배열을 두번 째 인수로 취함 |
Function.prototype.bind()
특정 스코프의 값을 사용할 수 있도록 this의 값을 바인딩
Method | 역할 | Payload |
GET | 모든/특정 리소스를 조회 | X |
POST | 리소스를 생성 | O |
PUT | 리소스 전체를 교체 | O |
PATCH | 리소스 일부를 수정 | O |
DELETE | 모든/특정 리소스를 삭제 | X |
호이스팅
- var 키워드로 선언하거나, 초기화된 변수는 현재 스코프의 최상위까지 옮겨진다.
- 함수 선언은 함수 몸체가 호이스팅이 되는 반면, 변수 형태로 작성된 함수 표현식은 변수 선언만 호이스팅이 된다.
==와 ===의 차이
==은 타입 변환이 필요한 경우 타입변환 후 동등 비교
장점 | 단점 | |
"use strict"; | - 실수로 전역 변수를 만드는 것이 불가능 - 암묵적으로 실패한 예외를 throw하지 못하는 할당을 만든다. - 삭제할 수 없는 속성을 삭제하려고 시도 - 함수의 매개변수 이름은 고유해야 함 - this는 전역 컨텍스트에서 undefined - 예외를 발생시키는 몇가지 일반적인 코딩을 잡아냄 |
- function.caller와 function.arguments에 더 이상 접근 불가능 - 서로 다른 엄격한 모드로 작성된 스크립트를 병합하면 문제가 발생할 수도 있음 |