제일 바깥에서 this를 참조하면 global이 나올 줄 알았는데 module.exports라는 빈 객체가 나오네 제일 바깥 this와 function 내부의 this가 둘다 global 객체로 같다는 예제룰 해보려했는데.. 크롬에서는 둘다 window 객체로 같더만..
댓글 18
그거 애로우펑션 아니면 죄다 외부객체인데 외부객체의 이름이 브라우저에선 window고 커먼js에서는 모듈임
20160525(circir6174)2017-05-04 20:44
ㄴ 그거는 런타임따라 당연히 다를 거라 생각했는데, 문제는 크롬에서는 펑션 내부와 제일 바깥의 this가 둘다 window로 같은데에 반해 노드에서는 다르더라고
그거 애로우펑션 아니면 죄다 외부객체인데 외부객체의 이름이 브라우저에선 window고 커먼js에서는 모듈임
ㄴ 그거는 런타임따라 당연히 다를 거라 생각했는데, 문제는 크롬에서는 펑션 내부와 제일 바깥의 this가 둘다 window로 같은데에 반해 노드에서는 다르더라고
console.log(this); (function() { console.log(this); })();
위 코드의 출력값이 크롬에서는 같은 게 연달아 나오고, 노드에서는 서로 다른게 나온다는 소리..
(function() { return this })() == thistrue
전 같게나오네여 혹시 어느환경에서 찍어보심
노드 7.9.0입니다
전 v7.4.0 repl에서 확인해봄
브라우저 기반에서 자바스크립트 전역 객체는 window고 런타임 서버 실행환경인 노드는 global로 서로 다름. ^^ - dc App
ㄴ 전역객체가 런타임간에 다른건 아는데 그게 아니라 최상위 레벨에서 this가 전역 객체를 가리키지 않아서 이상하다는 질문입니다 ㅠㅠ
nested function의 내부의 this는 정상적으로 global로 나오고요..
그거 혹시 함수가 아니라 메서드아님?
메서드라 바인딩된거 아니면 말이 안되지않나
제가 공부하던 부분이 메서드에서와 일반 함수 내에서의 차이라 그거는 체크했어요 ㅠㅠ
그리고 메서드에서 했다고 쳐도 둘다 false가 나와야 되는데 현재 크롬은 true고 node가 false라..
==로 비교하지말고 각각 찍어보세여 내부에 this가 이상한거에 바인딩된거같음
각각 찍으면 최상위 this는 {}나오고 함수내 this는 길게 표시되는 global 나오네요
검색해보면 In the top-level code in a Node module, this is equivalent to module.exports. That's the empty object you see.