본문 바로가기

개발면접/자바스크립트 문제

(3)
Q3. this키워드 화살표함수와 일반함수의 차이 무엇이 출력될까요? const shape = { radius: 10, diameter() { return this.radius * 2 }, perimeter: () => 2 * Math.PI * this.radius, } console.log(shape.diameter()) console.log(shape.perimeter()) 아래를 열면, 정답이 보인다. 더보기 첫번째 콘솔로그는 일반함수이기 때문에, this가 shape 객체를 가리켜 20이 찍힐것이다. 두번째 콘솔로그는 화살표함수임에 유의해야한다. 화살표함수에서는 this키워드가 상위스코프의 this를 상속받는다는 개념과 bind메소드가 실행되지 않는다. 따라서, perimeter에서의 this객체는 상위 스코프인 글로벌, 즉 window객체를 가..
Q2. var와 let의 차이 (아직 완벽히 이해 못한듯?) 위의 for문과 아래의 for문 각각 무엇이 출력 될까요? for (var i = 0; i console.log(i), 1) } for (let i = 0; i console.log(i), 1) } 아래를 열면, 정답이 보인다. 더보기 어려운데? 그니까 var는 함수스코프이기때문에, for문의 스코프에 영향을 받지 않아서 같은 i를 참조한다? 근데 왜 i 는 3보다 작은데, var일때는 콘솔에 3이 찍힐까? => for문을 돌면, i가 3까지 찍힌뒤에 컴퓨터가 i < 3 이라는 조건문을 실행하여 for문을 빠져나오기 때문? 근데 let은 블록스코프라서 중괄호단위로 변수를 참조함. 따라서 for문을 돌릴..
Q1. 호이스팅 문제 Q1. 무엇이 출력 될까요? function sayHi() { console.log(name) console.log(age) var name = 'Lydia' let age = 21 } sayHi() 아래를 열면, 정답이 보입니다. 더보기 정답은 name은 undefined이고, age는 refference error이다. 여기서 착각할 수 있는 포인트는 var만 호이스팅이 되나? 라고 생각하게 된다. 하지만 자세히 뜯어보면, var와 let, 그리고 const 모두 호이스팅은 된다. 하지만 var만이 선언과 초기화가 동시에 일어난다는 것이다. 그래서 var는 undefined를 출력하게 된다. 하지만, let 키워드는 초기화가 실행되기 전에 변수에 접근하려 했으므로 참조오류가 뜨는 것이다. 그리고 그 ..