55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바스크립트 중고급: 엔진 핵심
선생님 스코프 질문이 있습니다.
강좌와는 조금 관계없는 질문 일 수도 있지만.. addeventlistener.('click', function(){}}; 이벤트리스너 인자의 fucntion은 스코프가 어떻게 결정 되는지 궁금합니다.. 1. addeventlistener.('click', function scope(){}); 2. addeventlistener.('click', scope); function scope(){} function 오브젝트 생성 시점에 스코프가 결정이 되는데 1,2 번의 scope함수는 [[scope]]가 다르게 설정 되나요..? 감사합니다.
- 미해결자바스크립트 중고급: 엔진 핵심
[정리시간] 해보았습니다!
'use strict' var member = { jan: { item:{ title: "JS북", amount: 100 }, point: [10, 20, 30] }, feb: { item:{ title: "HTML", amount: 200 }, point: [40, 50, 60] } } function show(param){ for(var type in param){ if(Object.prototype.toString.call(param[type] ) === "[object Object]"){ show(param[type]); }else if(Array.isArray(param[type])){ console.log(param[type]) }else{ console.log(type + ":" + param[type]) } } } show(member) // title:JS북 amount:100 (3) [10, 20, 30] title:HTML amount:200 (3) [40, 50, 60]
- 미해결자바스크립트 중고급: 엔진 핵심
선생님 질문있습니다!!
'use strict'; var point = 45645; var get = { point: 5645641231 } var book = { point: 123, get: function(){ return this.point; } } var obj = book.get.bind(book); // 실행하는것이 아니라 book.get이라는 똑같은 함수를 다시 만들어 this바인딩컴포넌트에 book오브젝트를 바인딩 console.log(book.get) console.log(obj) console.log(book === obj) console.log(obj()) //123 console.log(obj.call(get)) //123 bind()로 만들어진 함수에 call을 해도 결과가 변함없는것은 내부프로퍼티인 [[BoundThis]] 를 먼저 참조하기 떄문인가요? 이말은 즉, call과 apply를 쓸 수 없단 말인건가요? 감사합니다.
- 미해결자바스크립트 중고급: 엔진 핵심
질문드려도 될까요 선생님..
function Book(){ console.log(this.point) } // Book.prototype.setPoint = function(){ // this.point = 100; // } // Book.prototype.getPoint = function(){ // this.setPoint(); // console.log(this.point) // } Book.prototype = { constructor: Book, setPoint: function(){ this.point = 100; }, getPoint: function(){ this.setPoint(); console.log(this.point) } } var obj = new Book(); obj.getPoint() 보다보니 class와 비슷하게 생긴거 같은데 클레스가 이와같은 원리로 작동한다고 보면 될까요??
- 미해결자바스크립트 중고급: 엔진 핵심
엔진이 식별자 해결을 위해서 스코프를 사용한다고 하셨는데
여기서 엔진은 자바스크립트 엔진을 의미하나요?
- 미해결자바스크립트 중고급: 엔진 핵심
[ 정리 시간 ] 정리해봤습니다.
제가 생각한 내용을 기술해봤습니다. 오해하고 있는 부분이 있다면 피드백 부탁드립니다. 좋은 강의에 대해 항상 감사합니다 ^^
- 미해결자바스크립트 중고급: 엔진 핵심
코딩 시간 풀이 피드백 받고 싶습니다.
// ===== 코딩 시간 ===== // 1. 함수 선언문 - 함수 호출 - 함수 선언문 function book() { function getBook() { return "책 1"; } console.log(getBook()); function getBook() { return "책 2"; } } book(); // 책 2 /** * 1. 엔진은 함수 선언문을 찾아 해석한다. * + 첫 번째 getBook 선언문을 만나, Function 오브젝트를 생성한다. "값"을 초기화하고 Scope가 설정된다. * + 두 번째 getBook 선언문을 만나, Function 오브젝트를 생성하지만, 이미 같은이름존재하므로, 값만 "책 2" 로 변경된다. * 2. 변수 초기화 * 3. 함수 코드 실행 * + Scope 에 설정되어있던, 두 번째 getBook Function 오브젝트의 반환 값인, "책 2"이 반환된다. */ // 2. 함수 표현식 - 함수 호출 - 함수 표현식 function book() { var getBook = function () { return "책 1"; }; console.log(getBook()); var getBook = function () { return "책 2"; }; } book(); // 책 1 /** * 1. 함수 선언문 해석 * 2. 변수 초기화 * + 첫 번째 getBook 이라는 변수의 function 키워드를 만나 undefined 로 설정 * + 두 번째 getBook 변수에 또 function 키워드를 만나 undefined 덮어 설정 * 3. 함수 코드 실행 * + 첫 번째 getBook 에 Function 오브젝트가 생성되면서, 반환 값인 "책 1"이 getBook 에 값으로 할당이 된다. * + console 에서 이제 첫 번째 getBook 함수 호출이 가능해지고, 첫번째 getBook 오브젝트의 "책 1" 이 찍힌다. * + 마지막으로, 두 번쨰 getBook 의 Function 오브젝트가 생성되고, 이 때, 반환 값이 "책 2"로 다시 설정된다. */ // 3. 함수 선언문 - 함수 호출 - 함수 표현식 function book() { function getBook() { return "책 1"; } console.log(getBook()); var getBook = function () { return "책 2"; }; } book(); // 책 1 /** * 1. 함수 선언문을 해석한다. * + 첫 번째 getBook 선언문이 있으므로, 해석하고, Functio 오브젝트를 생성한다. * 2. 변수를 초기화 한다. * + 두 번째 getBook 변수에 undefined 가 설정하려고 했으나, 이미 초기화가 되어 있으므로 생략 * 3. 함수 코드를 실행한다. * + 이미, 함수 선언문 해석과정에서, getBook Function 오브젝트가 생성되었으므로, getBook 함수 호출이 가능하다. * + 결과적으로, console 에는 "책 1"이 찍힌다. * + 마지막으로, getBook 변수에 Function 오브젝트가 생성되고, 이미 함수 선언문에서 초기화 되어있던 getBook 이라는 이름의 값이 "책 2" 반환 값을 가지는 Function 오브젝트로 변경 */ // 4. 함수 표현식 - 함수 호출 - 함수 선언문 function book() { var getBook = function () { return "책 1"; }; console.log(getBook()); function getBook() { return "책 2"; } } book(); // 책 1 /** * 1. 함수 선언문을 해석한다. * + 마지막에 존재하는 getBook 함수 선언문으로 인해, 반환 값을 "책 2"로 하는 Function 오브젝트가 생성 * 2. 변수 초기화 * + 첫 부분의 변수, getBook 이름에 undefined 값을 할당하려고 했으나, 이미 "값" 이 존재하므로 생략 * 3. 함수 코드 실행 * + 첫 부분의 getBook 변수의 반환 값이 "책 1"인 Function 오브젝트가 생성되면서, 이를 getBook 이라는 이름의 값으로 할당 * + console 에서 호출하는 getBook은 첫 부분의 getBook 변수의 Function 오브젝트의 함수를 호출하고, 이는 "책 2" 를 반환 */
- 미해결자바스크립트 중고급: 엔진 핵심
질문있습니다.
오브젝트 환경 레코드의 경우 글로벌 함수와 변수가 적용된다고 하셨는데, var을 사용하지 않고 변수를 선언하게 되면, 함수 스코프 밖에 있는 글로벌 오브젝트 안의 함수와 변수를 사용하게 되서 동적인게 되는 건가요?
- 미해결자바스크립트 중고급: 엔진 핵심
원본 생성자함수의 prototype안 메소드를 삭제해도 인스턴스에 할당된 메소드는 이와관계없이 동작이되는건가요?
삭제된 글입니다
- 미해결자바스크립트 중고급: 엔진 핵심
[정리] 예제 정리해 보았습니다.
1. 함수 선언문이 없음으로 넘어감 2. 변수 할당 → obj = undefined 3. 코드 실행 → obj = {} → obj.getTotal = function(){}, 이때 getTotal function object 생성, [[Scope]] 설정 function object의 [[FormalParameters]]에 [ ‘one’, ‘two’, ‘two’ ] 생성 → obj.getTotal(11, 22, 55)를 통해 getTotal 함수 호출 4. getTotal 함수에 실행 콘텍스트 이동 + 파라미터의 값이 실행 콘텍스트로 넘어감 5. 파라미터 값이 선언적 환경 레코드에 매핑됨 → { one : 11 } → { one : 11, two : 22 } → { one : 11, two : 55 } two가 이미 존재하기 때문에 세 번째 값이 기존의 two에 할당되 two는 55가 됨 6. getTotal 안에 함수 선언문, 변수 할당이 없으로 넘어감 7. getTotal에서 코드 실행, log(one + two); → 선언적 환경 레코드에서 one과 two의 값을 찾음 → 66이 출력 ---------------------------------- 문제를 풀다가 모르는 부분이 나와서 질문드립니다. [[FormalParameters]]에 [ ‘one’, ‘two’, ‘two’ ] 가 생성되는 건가요? 아님 이름이 겹치기 때문에 [ ‘one’, ‘two’ ]가 생성되는 건가요?
- 미해결자바스크립트 중고급: 엔진 핵심
커리큘럼 질문입니다.
선생님. 선생님의 강의를 오늘 신청한 학생입니다. js의 기초는 알지만 너무 구멍이 많이 나있고, 계속 부족한부분이 있는것 같아,중고급, es기본,es심화를 들으려고 합니다. 기초 문법은 알고 있는데, 중고급부터 들어보고, 부족함을 느끼면 비기너를 듣는 방식을 취하려고 하는데, 이렇게 해도 괜찮을까요?
- 미해결자바스크립트 중고급: 엔진 핵심
[정리 시간] 작성해보았습니다.
선생님 안녕하세요. 벌써 이번 강의의 마지막 정리시간이네요...항상 감사드립니다. 작성한 내용 다른분들과 공유하고자 글을 올립니당. 1. book function 오브젝트를 생성 2. book 함수가 속한 글로벌 오브젝트를 function 오브젝트의 [[Scope]]에 설정 3. var obj = book(200); 에서 book(200)을 호출 --실행 준비 단계-- 4. 실행 콘텍스트를 생성 5. 3개의 컴포넌트 생성 (렉시컬/변수 환경 컴포넌트, this 바인딩 컴포넌트) 6. book function 오브젝트의 [[Scope]]를 외부 렉시컬 환경 참조에 바인딩 --초기화 및 실행 단계-- 7. 파라미터 이름인 bookParam에 200을 매핑하여 선언적 환경 레코드에 설정 8.function getPoint(pointParam){코드}에서 function 오브젝트를 생성 9. getPoint function 오브젝트의 [[Scope]]에 book 함수의 내부 영역이 설정됨 10. getPoint를 선언적 환경 레코드에 설정 11. var point;에서 변수 이름을 선언적 환경 레코드에 설정 12. var point = 100;에서 선언적 환경 레코드의 point에 100 할당 13. return getPoint;에서 getPoint function 오브젝트 반환 14. obj에 getPoint function 오브젝트를 할당 15. console.log(obj(400))에서 obj를 호출하면 getPoint(400) 함수가 호출됨 --getPoint 함수의 클로저와 관련된 부분-- 1. 실행 콘텍스트를 생성 2. getPoint function 오브젝트의 [[Scope]]를 외부 렉시컬 환경 참조에 바인딩 3. pointParam이라는 파라미터 이름에 400을 매핑하여 선언적 환경 레코드에 설정 4. 함수 안의 코드 실행 5. point = point + bookParam + pointParam;에서 6. point와 bookParam을 외부 렉시컬 환경 참조에서, pointParam을 선언적 환경 레코드에서 식별자 해결 7. 각각을 더한 값을 ponit에 할당 8. 따라서 콘솔창에 700이 출력됨 감사합니다!
- 미해결자바스크립트 중고급: 엔진 핵심
[정리 시간] 작성해보았습니다.
선생님 안녕하세요. 항상 감사드립니다! [정리 시간]의 내용을 작성해보았는데 어렵네요...ㅜㅜ 가독성 좋고 효율적인 코드를 짜보고 싶은데 맘처럼 쉽지 않은 것 같습니다...ㅎㅎ
- 미해결자바스크립트 중고급: 엔진 핵심
Array.prototype.slice.call(arguments)에 대한 질문
선생님 안녕하세요. 파라미터 병합의 예제에 있는 코드 중 Array.prototype.slice.call(arguments) 에 대해 질문이 있습니다. slice 메소드에서 call을 통해 arguments를 this로 참조하기만 하는 게 아닐까요? slice메소드가 실행될 배열이 주어진 게 없는 것 같은데, 10, 20이 파라미터로 들어 갔을 때 어떻게 [10, 20] 과 같은 배열의 형태로 반환되는 건지 궁금합니다. 감사합니다!
- 미해결자바스크립트 중고급: 엔진 핵심
[정리 시간] 작성해보았습니다.
선생님 안녕하세요. 좋은 강의 감사드립니다! [정리 시간]의 내용을 작성해보았습니다. [코드 1] 1. 마지막 줄에서 fn() 호출 2. fn() 함수는 글로벌 함수로, 글로벌 오브젝트는 이름이 없으므로 함수 이름만 작성하여 호출함 3. 따라서 이 때 this는 글로벌 오브젝트를 참조함 4. 또한 window는 글로벌 오브젝트를 참조함 5. 그러므로 console.log(this === window)에서 true를 출력함 6. console.log(this.value)에서도 this는 글로벌 오브젝트를 참조 7. 글로벌 오브젝트에 value라는 프로퍼티가 없기 때문에 undefined를 출력함 [코드 2] 1. 마지막 줄에서 book() 호출 2. book() 함수는 글로벌 함수로 함수 내부에서 this는 글로벌 오브젝트를 참조함 3. 따라서 this.getTitle() 함수를 호출하면 4. function getTitle() {console.log('HTML책');}로 가서 HTML책을 출력함 5. 다시 book 함수의 내부로 돌아가 getTitle()을 호출 6. 이 때의 getTitle() 함수는 우선적으로 book 함수의 선언적 환경 레코드에서 getTitle을 찾아 실행 7. 따라서 function getTitle() {console.log('JS책');}로 가서 JS책을 출력함 감사합니다~!!
- 미해결자바스크립트 중고급: 엔진 핵심
[정리 시간]의 내용 작성해보았습니다.
안녕하세요. 좋은 강의 감사드립니다! [정리 시간]의 내용을 작성해보았습니다. ==초기화 단계== 1. obj.getTotal(11, 22, 55)함수가 호출되면 실행 콘텍스트가 생성되고 실행 콘텍스트 안으로 이동 -함수를 호출한 오브젝트, 함수 코드, 호출한 파라미터 값을 실행 콘텍스트로 넘겨줌 2. getTotal 오브젝트의 [[FormalParamters]]에서 -호출된 함수의 이름을 구함 -["one", "two", "two"]의 형태 3. 상기의 배열을 하나씩 읽음 4. 호출한 파라미터의 값에서 index 번째의 값을 구함 5. 배열 안에 있는 파라미터의 이름과 4번에서 구한 값을 파라미터 작성 순서에 맞추어 값을 매핑 6. 선언적 환경 레코드에 -{one:11}을 먼저 매핑하고 두번째로 {two:22}를 매핑함 -세번째로 two를 매핑해야 하는데 이미 two라는 이름이 존재하고, 이를 매핑하는 과정에서 값이 55로 변경됨 -즉, {one:11, two:55} 형태로 설정함 7. 함수에 초기화할 코드가 없으므로 -첫번째 줄로 이동하여 함수 코드를 실행 ==실행 단계== 8. console.log(one + two); -선언적 환경 레코드에서 one과 two의 값을 구함 -11+55이 결과인 66이 출력 obj.getTotal() 함수의 외부 렉시컬 환경 참조는 어떻게 되어 있을까요? 이 경우에는 글로벌 오브젝트일까요..? getTotal이 프로퍼티로서 속해있는 obj 오브젝트가 외부 렉시컬 환경 참조일까요..? obj.getTotal() 함수가 obj라는 글로벌 변수 내부의 프로퍼티로서 있다보니 헷갈리네요ㅜㅜ
- 미해결자바스크립트 중고급: 엔진 핵심
[정리 시간]의 작성 내용입니다.
안녕하세요. 좋은 강의 감사드립니다. [정리 시간]의 내용을 작성해보았는데요, 제대로 이해하고 있는 게 맞을까요..? 1. function 키워드를 만나 book이라는 function 오브젝트를 생성하고, 오브젝트의 [[Scope]]에 글로벌 오브젝트 설정 2. 마지막 줄에서 book() 함수를 호출하면 3. 엔진은 실행 콘텍스트를 생성하고 실행 콘텍스트 안으로 이동 ==준비 단계 (실행 콘텍스트에서 실행할 수 있는 환경 구축)== 4. 컴포넌트를 생성하여 실행 콘텍스트에 첨부 -렉시컬 환경 컴포넌트, 변수 환경 컴포넌트, this 바인딩 컴포넌트 5. 환경 레코드를 생성하여 렉시컬 환경 컴포넌트에 첨부 6. 외부 렉시컬 환경 참조를 생성하여 렉시컬 환경 컴포넌트에 첨부하고 -book이라는 function 오브젝트의 [[Scope]]를 설정(참조) ==초기화 단계== 7. 호출한 함수의 파라미터 값이 있다면, 호출된 함수의 파라미터 값에 매핑하여 환경 레코드에 작성하나 파라미터 없음 8. function 키워드를 만나 get이라는 function 오브젝트를 만들고 [[Scope]]로 book 오브젝트를 설정 9. point라는 변수에 undefined를 할당 10. 여기까지는 외부에 실행 상태를 제공하지 않음 ==실행 단계== 11. book 함수 안의 코드를 실행 12. point 변수에 123을 할당 13. get() 함수를 호출하면 엔진은 실행 콘텍스트를 생성하고 실행 콘텍스트 안으로 이동 get()함수의 실행 콘텍스트 ==준비 단계== 15. 컴포넌트를 생성하여 실행 콘텍스트에 첨부 -렉시컬 환경 컴포넌트, 변수 환경 컴포넌트, this 바인딩 컴포넌트 16. 환경 레코드를 생성하여 렉시컬 환경 컴포넌트에 첨부 17. 외부 렉시컬 환경 참조를 생성하여 렉시컬 환경 컴포넌트에 첨부하고 -get이라는 function 오브젝트의 [[Scope]]를 설정 ==초기화 단계== 18. 파라미터가 없고 function 키워드나 변수가 없음 ==실행 단계== 19. return point를 만나고, point라는 식별자를 외부 렉시컬 환경 참조에서 찾아 123을 반환 20. get()함수의 reutrn 값이 book()함수의 return 값이므로 콘솔창에 123을 출력 감사합니다!!
- 미해결자바스크립트 중고급: 엔진 핵심
[코딩 시간]의 작성 내용입니다.
선생님 안녕하세요. 하기와 같이 작성해봤는데 제대로 이해하고 있는 게 맞는지 확인 부탁드립니다. 1. 함수 선언문 해석 book()함수를 호출하면 가장 먼저 함수 블록 안에서 함수 선언문을 찾음. function getBook() { return '책1'; }을 만나서 getBook이라는 이름의 function 오브젝트를 생성. 그 다음으로 function getBook() { return '책2'; } 을 만남. 해당 함수 선언문 역시 function 오브젝트를 생성하는데, 첫번째 함수 선언문의 오브젝트와 이름이 같아 getBook이라는 이름의 value 값은 두번째 함수 선언문의 function 오브젝트로 변경됨. 다시 함수 블록의 첫번째 줄로 이동. 2. 변수 초기화 초기화 할 변수가 없음 . 다시 함수 블록의 첫번째 줄로 이동. 3. 코드 실행 console.log(getBook());에서 getBook() 함수를 호출하고 function getBook() { return '책2'; }의 함수 블록으로 이동하여 '책2'라는 값을 반환 후 '책2'를 콘솔창에 출력 . 1. 함수 선언문 해석 함수 선언문이 없으므로 다시 함수 블록의 첫번째 줄로 이동. 2. 변수 초기화 getBook이라는 변수의 값을 undefined로 초기화. 다시 한번 getBook이라는 변수를 만나고 undefined로 초기화. *이 부분이 헷갈리는데요, getBook이라는 변수를 다시 한번 만났을 때, 이미 getBook에 undefined라는 값이 있기 때문에 추가적인 처리를 하지 않는다고 이해하는 게 맞을까요? 아니면 getBook이라는 변수에 새롭게 undefined를 할당한다고 이해하는 게 맞을까요?* 다시 함수 블록의 첫번째 줄로 이동. 3. 코드 실행 getBook이라는 변수에 function 키워드가 있으므로 function 오브젝트를 생성하여 getBook 변수에 할당. getBook이 function 오브젝트가 되므로 getBook() 함수를 호출 가능. console.log(getBook());에서 getBook() 함수가 실행되고 함수 블록으로 이동하여 '책1'을 반환. 이를 콘솔창에 출력. var getBook = function () { return '책2'; };에서 function 키워드를 만나 getBook이라는 이름의 function 오브젝트를 생성, 기존의 getBook 이라는 이름의 function 오브젝트가 function () { return '책2'; }로 변경됨. 1. 함수 선언문 해석 function getBook() { return '책1'; };이 함수 선언문이므로 getBook이라는 이름의 function 오브젝트를 생성. 더 이상의 함수 선언문이 없으므로 함수 블록의 첫번째 줄로 이동. 2. 변수 초기화 getBook이라는 변수의 값을 초기화하려고 했지만, 이미 getBook이라는 이름으로 fucntion 오브젝트가 존재함. 따라서 초기화하지 않고 넘어감. 다시 함수 블록의 첫번째 줄로 이동. 3. 코드 실행 console.log(getBook());에서 getBook()함수를 호출하고 해당 함수에서 반환한 '책1'을 콘솔창에 출력. var getBook = function () { return '책2'; };에서 function 키워드를 만나 function 오브젝트를 생성. 이를 getBook이라는 변수에 할당하면서 함수 선언문에서 생성된 getBook이라는 이름의 값이 해당 function 오브젝트로 변경됨. 1. 함수 선언문 해석 function getBook() { return '책2'; }이 함수 선언문이므로 getBook이라는 function 오브젝트를 생성. 더 이상의 함수 선언문이 없으므로 함수 블록의 첫번째 줄로 이동. 2. 변수 초기화 var getBook = function () { return '책1'; };에서 getBook이라는 변수에 undefined를 할당하려고 했으나 이미 getBook이라는 이름의 값으로 function 오브젝트가 존재하여 undefined를 할당하지 않고 기존의 값을 유지. 더 이상의 변수가 없으므로 다시 함수 블록의 첫번째 줄로 이동. 3. 코드 실행 var getBook = function () { return '책1'; };에서 function 키워드를 만나 function 오브젝트를 생성하고 이를 getBook 변수에 할당. 기존의 getBook의 값이 변경됨. console.log(getBook());에서 getBook()함수를 호출하여 '책1'을 반환하고 해당 값을 콘솔창에 출력. 감사합니다!!
- 미해결자바스크립트 중고급: 엔진 핵심
안녕하세요
안녕하세요 강사님. 수업 즐겁게 잘 듣고 있습니다. this에 관해 여쭙고 싶은게 있습니다. function a() { var point = 100; function b() { console.log(this); } b(); } a(); 이 코드에서는 this가 window로 나오는 이유를 알고 싶습니다. var a = { point: 100, b: function () { console.log(this); }, }; a.b(); 이 코드에서는 b 앞의 오브젝트가 있기에 this가 a를 가리키는 것은 이해하였습니다. 그렇다면 위와 같은 코드에서 a 내부의 point를 활용하기 위해서는 클로저를 이용하거나 bind로 a를 묶어주는 방법을 사용해야 하나요?? 오브젝트.함수 와 같이 오브젝트가 없다면 함수 내부에서 실행되더라도 this가 window를 가리키는건지 여쭙고 싶습니다. 강의를 많이 돌려보았는데 this는 어려운 것 같습니다 ㅜㅜ
- 미해결자바스크립트 중고급: 엔진 핵심
호이스팅과 오버로드
좋은 강의 감사드립니다. 호이스팅과 오버로딩을 배우던 중 의문점이 생겨 질문 드립니다. 먼저, 호이스팅 강의에서 함수 코드 해석의 첫 단계인 함수 선언문 단계에서 book과 function오브젝트가 스코프에 할당이 되고, 두 번째 변수 초기화 단계에서 변수를 초기화하려고 하는데 이미 값이 있으므로 undefined를 할당하지 않고 원래대로 냅둔다고 하셨습니다. 그리고 오버로딩 강의의 두 번쨰 페이지에서는 "{name : value}형태에서 이름이 같으므로 값이 변경된다." 라고 기술하셨습니다. 여기서 제 질문은 같은 해석단계, 즉 여기서는 함수 선언문 해석 단계에서는 값이 대체가 될 수 있는건가요? 아니면 스코프에 값이 할당된 상태에서 초기화를 하려고 하면 프로퍼티 자체가 이미 존재하기 때문에 하지 않는거다 라고 이해를 해야하나요? 감사합니다.