inflearn logo
강의

Course

Instructor

Intermediate-Advanced JavaScript: Engine Core

2. this reference scope, this and strict mode, this reference object, [cleanup time]

fn 함수와 book.get 함수 차이 질문드립니다...ㅠㅠㅠ

542

oneny

12 asked

1

// 정리 시간
var book = {
	value: 123,
	get: function() {
		var value = 456;
		console.log(this === window);
		console.log(this.value);
	}
};
var fn = book.get;
fn();
// true
// false
// undefined

정리 시간1을 공부하면서 fn() 함수 호출 시 새롭게 할당된 function 오브젝트인 fn() 함수 안으로 들어가는 것인지
아니면 book.get 함수 안으로 들어가는 것인지 궁금해서 첫 줄에 debugger를 작성하여 한 줄씩 이동해서 확인해봤더니
book.get 함수 안으로 이동하는 것을 확인했습니다.

근데 저는 왜 새롭게 할당된 fn 함수 안으로 엔진이 이동을 안하는 것인지 궁금합니다. 그래서 이것이 설정이 아니라 참조인가 해서
확인하려고 다음과 같은 코드를 실행했습니다.

var book = {
	value: 123,
	get: function() {
		var value = 456;
		console.log(this === window);
		console.log(this === book);
		console.log(this.value);
	}
};
var fn = book.get;
fn(); // true, false, undefined
book.get(); // false, true, 123
var book = {
 	value: 111,
	get: function() {
    console.log(this.value);
  }
}
fn(); // true, false, undefined
book.get(); // 111

 

마지막에서 두 번째 줄인 fn() 함수는 그대로 처음 할당된 book 오브젝트를 경로로 get 함수에 들어가고
마지막 줄인 book.get() 함수는 마지막에 할당된 book 오브젝트를 경로로 들어가는 것을 확인해서 참조는 아닌 것을 확인했습니다.

왜 fn 함수와 book.get은 서로 다른 독립적인 function 오브젝트이면서 fn() 함수를 호출했을 때 book 오브젝트 안의 get 함수 안으로 엔진이 이동하는 것인지 궁금합니다....ㅠㅠㅠㅠㅠ

그리고 debugger 창을 열어서 확인했는데 fn function 오브젝트의 name 프로퍼티 값으로 "get"이 할당되어있던데 이거와 관련이 있는 것인지 궁금합니다!!...ㅠㅠㅠㅠㅠㅠㅠ

javascript

Answer 1

0

tonextday

왜 fn 함수와 book.get은 서로 다른 독립적인 function 오브젝트이면서...
==> 독립적이지 않습니다.

var fn = book.get;에서 get의 Function 오브젝트가 메모리에 설정됩니다.
이때 메모리 주소(address)가 100이라고 하겠습니다.

var fn = book.get;을 실행하면, 메모리 주소 100을 fn 변수에 설정합니다. 따라서 fn()을 호출하면 메모리 주소 100에 설정된 Function 오브젝트를 호출하게 되며, 이것은 book.get입니다.
즉, fn과 book.get이 같은 메모리 주소를 참조합니다.

 

0

oneny

와.. 그러면 제가 한 번 더 book 오브젝트를 선언하여 {get: function 오브젝트} 프로퍼티를 대체해도 fn함수를 호출 시 함수 내 코드가 변하지 않았던 이유가 fn은 그대로 메모리 주소 100을 참조하니깐 그랬던 것이군요! 와.. 대박 감사합니다....!

getBook 실습 예제중 질문드립니다!

0

419

1

__proto__ 에 대해 질문드립니다

0

315

1

호이스팅 코딩시간 풀이

0

358

1

[코딩 시간] JS {name: value} 이해

0

340

1

[[Scope]] 와 [[Environment]]는 같은 개념인가요

0

345

0

slice

0

239

0

스코프가 뭔가요?

0

307

0

어려워요

0

255

0

강사님 변수이름에 get을 붙이는 이유를 알고싶습니다.

0

339

1

[정리 시간] 정확하게 이해했는지 확인 부탁드립니다.

0

300

0

스코프 질문

0

253

1

this binding 논리 질문입니다.

0

279

1

파라미터 값을 매핑할 때

0

251

0

ES6부터는 this 바인딩을 환경 레코드에서 참조한다고 들었습니다.

0

209

0

정리시간 입니다.

0

228

0

정리시간입니다.

6

269

0

정리 시간 입니다.

0

203

0

정리시간입니다.

6

227

0

코딩시간 입니다.

1

222

0

선생님 스코프 질문이 있습니다.

1

240

0

[정리시간] 해보았습니다!

0

175

0

선생님 질문있습니다!!

0

159

0

질문드려도 될까요 선생님..

0

217

0

엔진이 식별자 해결을 위해서 스코프를 사용한다고 하셨는데

0

185

0