JSONP(JSON with Padding)는 현재 페이지에서 cross-origin 도메인으로의 Ajax 요청이 허용되지 않기 때문에 웹 브라우저에서 cross-domain 정책을 우회하는데 사용되는 방법
어떠한 문서나 스크립트가 다른 프로토콜 / 포트 / 호스트 에 있는 리소스 사용하는 것을 제한하는 정책
JSONP는 동적으로 생성된 script 태그를 사용하여 다른 도메인에서 JSON 데이터를 가져온다. 이 때, JSON 데이터를 쿼리 문자열에 포함시키고, 이를 호출하는 콜백 함수 이름도 함께 포함시킨다.
서버는 요청된 JSON 데이터를 해당 콜백 함수 이름과 함께 응답합니다. 이 때, 응답 데이터는 함수 호출의 인수로 전달됩니다. 이렇게 하면 다른 도메인에서 JSON 데이터를 안전하게 가져올 수 있습니다.
<!-- https://mydomain.com -->
<script>
function printData(data) {
console.log(`My name is ${data.name}!`);
}
</script>
<script src="https://example.com?callback=printData"></script>
// https://example.com?callback=printData 에서 로드된 파일
printData({name: 'Yang Shun'});
라이브러리는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함할 수 있다.
인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것
그러나 선언문만 호이스팅되며 할당문은 호이스팅 되지 않는다
var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않는다.// var 선언이 호이스팅됩니다
console.log(foo); // undefined
var foo = 1;
console.log(foo); // 1
// let/const 선언은 호이스팅되지 않습니다.
console.log(bar); // ReferenceError: bar is not defined
let bar = 2;
console.log(bar); // 2
// 함수 선언
console.log(foo); // [Function: foo]
foo(); // 'FOOOOO'
function foo() {
console.log('FOOOOO');
}
console.log(foo); // [Function: foo]
// 함수 표현식
console.log(bar); // undefined
bar(); // Uncaught TypeError: bar is not a function
var bar = function () {
console.log('BARRRR');
};
console.log(bar); // [Function: bar]
한 요소에 이벤트가 발생하면, 이 요소에 할당된 핸들러가 동작하고, 이어서 부모 요소의 핸들러가 동작합니다. 가장 최상단의 조상 요소를 만날 때까지 이 과정이 반복되면서 요소 각각에 할당된 핸들러가 동작
이벤트 버블링은 이벤트 전파 과정 중에 이벤트 타깃까지 이벤트 전파가 이루어질 때까지 모든 조상 요소를 탐색하므로, 이벤트 핸들러를 한 곳에서 관리할 수 있어서 코드를 간결하게 유지할 수 있다. 그러나 이벤트 버블링으로 인해 의도치 않은 이벤트 처리가 발생할 수도 있으므로 주의해야 한다. 이를 방지하기 위해서는 이벤트 캡처링(Event Capturing)을 사용하거나 이벤트 버블링을 중지시키는 방법을 사용할 수 있다.
버블링(Bubbling) : 자식 요소에서 발생한 이벤트가 바깥 부모 요소로 전파 (기본값)
캡쳐링(Capturing) : 자식 요소에서 발생한 이벤트가 부모 요소부터 시작하여 안쪽 자식 요소까지 도달

stopPropagation() 메소드를 호출하면 버블링 또는 캡처링 설정에 따라 상위, 하위로 가는 이벤트 전파를 막을 수 있다.
stopImmediatePropagation() 메소드를 호출하면, 이벤트 전파와 더불어 형제 이벤트 실행을 중지한다.
document.body.addEventListener('click', (e) => {
if (e.target.id === "ancestor") {
print('ancestor')
}
if (e.target.id === "parent") {
print('parent')
}
if (e.target.id === "child") {
print('child')
}
});
e.preventDefault() 는 이벤트 전파 뿐만 아니라 기본 이벤트 동작 자체를 취소한다.
attribute와 property의 차이점은 무엇인가요?attribute는 html문서에서 elements에 추가적인 정보를 넣을 때 사용되는 요소
<div class= ‘my-class’></div>라는 my-class라는 클래스 속성을 가진 div 요소에서 div 는 element(요소) 이고 class 는 attribute(속성) 가 되며 my-class 는 class attribute의 value(값)가 됩니다.
property는 html DOM 안에서 attribute를 가리키는 표현
위 내용은 <div class= ‘my-class’></div> 태그를 DOM 으로 표현한 것인데 위에서 className이 property가 된다
attribute는 HTML 마크업에 정의되고 정적인(바뀌지 않는) 속성을 뜻한다
property는 HTML DOM에 정의되고 동적인(바뀌는) 속성을 뜻한다
참조 무결성에 대해 좋지 않음
참조 무결성은 관계 데이터베이스 관계 모델에서 2개의 관련 있던 관계 변수 간의 일관성
load 이벤트와 document DOMContentLoaded 이벤트의 차이점은 무엇인가요?DOMContentLoaded 이벤트는 브라우저가 HTML을 전부 읽고 DOM 트리를 완성하는 즉시 발생load 이벤트는 HTML로 DOM 트리를 만드는 게 완성되었을 뿐만 아니라 외부 자원도 모두 불러오는 것이 끝났을 때 발생위와 같은 규칙엔 두 가지 예외사항이 있다.
이벤트 버블링 방지 방법은 무엇이 있고 각각에 대해 어떤 역할을 하는지 설명해주세요
이벤트 버블링 방지 방법 글 참고
JSONP의 동작 방식을 설명해 주세요
동작 방식 글 참고
attribute와 property의 차이점에 대해 설명해 주세요
attribute는 HTML 마크업에 정의되고 정적인(바뀌지 않는) 속성을 뜻한다
property는 HTML DOM에 정의되고 동적인(바뀌는) 속성을 뜻한다
DOMContentLoaded를 막지 않는 스크립트에 대해 설명해주세요