Conversation
|
ㅁㅊ!! 잘못 닫았습니다... 죄송합니다 😅😅😅 Q1. 다음 코드를 보고, 예상 출력 결과와 이유를 작성하세요.출력 결과는 아래와 같다. A btn
B undefined첫 번째 핸들러는 일반 함수로 정의되어 있고, 두 번째 핸들러는 화살표 함수로 정의되어 있다. 이 두 함수는 this 바인딩 방식이 다르기 때문에 서로 다른 결과를 출력한다. 먼저, btn.addEventListener('click', function() { ... }) 형태로 등록된 첫 번째 핸들러의 경우, 이벤트 리스너 내부의 this는 이벤트를 발생시킨 요소, 즉 요소를 가리킨다. addEventListener 메서드는 일반 함수가 콜백으로 전달될 때 자동으로 this를 해당 DOM 요소에 바인딩하기 때문이다. 반면 두 번째 핸들러인 btn.addEventListener('click', () => { ... })의 경우, 화살표 함수는 자신만의 this를 가지지 않고 정의된 시점의 상위 스코프(this)를 그대로 가져온다. 이 코드에서는 화살표 함수가 전역 스코프에서 정의되었기 때문에, 상위 스코프의 this는 브라우저 환경에서 window 객체가 된다. 즉!!!! 화살표 함수 내부에서는 이벤트를 발생시킨 버튼이 아니라 전역 객체를 가리키게 된다. Q2. 빈칸 채우기
Q3. 문제에 답하고, 답변에 대한 해설을 적어 주세요.function outer() {
var x=1;
function inner() {
console.log(x);
}
x=2;
return inner;
}
const fn = outer();
fn();inner는 outer의 렉시컬 환경을 기억하는 클로저다. inner는 outer 의 지역 변수 x 를 사용하므로, outer 의 렉시컬 환경을 기억하고 있다. 여기서 inner 가 기억하는 것은 지역변수 x 의 값 그 자체다. 따라서, outer가 끝나면 그 바인딩은 가비지 컬렉션으로 함께 들어간다. (X) 아니다!! inner는 outer의 렉시컬 환경을 기억하는 클로저이라고 했다. 즉!! outer 함수가 한 번 호출된 후 종료되더라도, 그 안에서 정의된 inner 함수가 반환되어 외부에서 계속 참조되고 있기 때문에, 따라서 outer가 종료된 뒤에도, inner가 여전히 x에 접근할 수 있고, 그 렉시컬 환경은 fn이 존재하는 한 메모리에서 해제되지 않는다. Q4. 클로저란 무엇이고, 실무에서 어떤 이점을 가져갈 수 있는지 적어 주세요.클로저는 상태를 안전하게 변경하고 유지하기 위해 사용되는 개념이다. 클로저를 이용하면 외부에서 직접 접근할 필요가 없는 내부 상태를 은닉하고, 특정 함수에게만 그 상태의 변경을 허용함으로써 캡슐화를 구현할 수 있다!! 즉, 상태가 의도치 않게 변경되지 않도록 보호하고, 외부에서는 접근할 수 없지만 내부 함수는 그 상태를 계속 기억하고 사용할 수 있게 하는 것이다. |
Q1. 다음 코드를 보고, 예상 출력 결과와 이유를 작성하세요.<button id="btn">Click</button>
<script>
const btn = document.getElementById('btn');
btn.addEventListener('click', function() {
console.log('A', this.id);
});
btn.addEventListener('click', () => {
console.log('B', this && this.id);
});
</script>A btn 첫 번째는 리스너로 일반 함수를 넘기고 있음. 일반 함수의 this는 브라우저가 이벤트 타깃을 바인딩해줌 Q2. 빈칸 채우기쉼표 Q3. 문제에 답하고, 답변에 대한 해설을 적어 주세요.function outer() {
var x=1;
function inner() {
console.log(x);
}
x=2;
return inner;
}
const fn = outer();
fn();X Q4. 클로저란 무엇이고, 실무에서 어떤 이점을 가져갈 수 있는지 적어 주세요.'클로저는 함수가 선언될 당시의 렉시컬 환경의 조합' 첫 번째 이점은 캡슐화가 가느함. 데이터와 데이터를 조작하는 함수를 하나의 단위로 묶어 관리하여 불필요한 외부 노출 방지. |
출력 결과 이유
X,
일반적으로 중첩 함수가 상위 스코프의 식별자를 참조하고 있고 중첩 함수가 외부 함수보다 더 오래 유지되는 경우에 한정하여 클로저 라고 부른다. |
Q1. 다음 코드를 보고, 예상 출력 결과와 이유를 작성하세요.
Q2. 빈칸 채우기
call은 인자를 ( )로 전달한다.apply는 인자를 ( )로 전달한다.bind는apply와call메서드와 달리 ( )를 호출하지 않으며, ( )를 반환한다.Q3. 문제에 답하고, 답변에 대한 해설을 적어 주세요.
inner는outer의 렉시컬 환경을 기억하는 클로저다.inner는outer의 지역 변수 x 를 사용하므로,outer의 렉시컬 환경을 기억하고 있다. 여기서inner가 기억하는 것은 지역변수 x 의 값 그 자체다. 따라서,outer가 끝나면 그 바인딩은 가비지 컬렉션으로 함께 들어간다. (O/X)Q4. 클로저란 무엇이고, 실무에서 어떤 이점을 가져갈 수 있는지 적어 주세요.
필수 포함 키워드: 은닉, 캡슐화