[ o ] : 정답
[ x ] : 내가 선택한 답 = 틀림
[ ] The function that is currently being invoked.
[ o ] An object that the invoked function points to when executing.
[ ] A variable used for lexical scope lookup.
this: 함수가 아님
호출된 함수가 실행할 때 가리키는 특정 객체입니다.
정적 스코프 lookup에 사용되는 변수가 아닙니다.
lexical scope: static scope(선언될 때 저장되는 스코프)
[lexical scope] https://stackoverflow.com/questions/1047454/what-is-lexical-scope
var x = 10;
var strangeAdd = function (y) {
var x = 20;
return this.x + y
};
result = strangeAdd(10);
[ ] 10
[ o ] 20
[ ] 30
[ ] NaN
this가 정의된 곳과는 무관하게 실행되는 지점이 글로벌영역이기 때문에 result 의 this는 window이다. 그렇기 때문에 window.x를 불러오기에 답이 20이 된다.
[ x ] Look to the function in which it is defined — that’s what the context is bound to.
[ o ] Look to where the function is called at call time to determine how it is called and evaluate from there.
- 함수가 정의되어있는 문맥이 아닌 실행 방식에 따라 결정됨.
- this는 함수가 실행될 때 실행되는 방식에 따라 결정됨.
.call()
이나 .allpy()
호출: 첫번째 인자로 명시된 객체function foo(){
console.log(this);
}
foo();
[ ] foo
[ ] console
[ ] A reference error will be thrown.
[ o ] Window or the global object.
this: free function invocation
전역에서 foo를 불렀기 이 this는 window가 된다.
var obj = {
foo: function(){
console.log(this);
}
}
obj.foo();
[ x ] foo
[ ] console
[ o ] obj
[ ] window or the global object.
여기서의 this: 부모 객체
(닷노케이션 기준 왼쪽의 객체가 this가 된다고 보면 됨.)
var obj = {
foo: function(){
console.log(this);
}
}
var fn = obj.foo;
fn();
[ x ] foo
[ ] console
[ ] obj
[ o ] Window or the global object.
free function invocation : this = window
fn이 function() { console.log(this); }가 되는것이기 때문에 이 this가 free function invocation이 됨.
obj.foo()의 경우에는 함수를 불러오는 것이 아니니 method invocation이다.
var fn = obj.foo
의 위치가 중요한게 아니고fn()
의 실행 시점이 중요함.this에서는 실행 위치가 중요함
var obj = {
foo: function(){
console.log(this);
}
}
var obj2 = {
foo: obj.foo
}
obj.foo.call(obj2);
[ x ] foo
[ ] console
[ o ] obj2
[ ] window or the global object.
.call()
이나.apply()
의 경우 실행시점에서 this의 값이 정해지는 것이 아니라 명시적으로 값을 정할 수 있다.
Q. JS에서의 주소
A. js에서는 주소 관리를 GC에서 하기 때문에 주소의 개념보다는 레퍼런스 참조의 개념으로 이해하는게 나을 것이다.
Q. Arraw function
A.
// function scope를 발생시키지 않음
const fn = () => {
}
// function scope 발생
const fn2 = function () {
}
JS runtime: JS가 실행되는 환경(js가 실행되는 환경에 따라 조금씩 다름)
내가 하려고 하는 것이 실행되지 않으면 실행하고자 하는 환경에서 지원이 되는지를 확인해야 함.
대표적인 환경: node vs browser
version이 존재함.
필요한 이유: 버전에 따라 실행되는 코드가
node관리매니저가 많은데도 nvm을 사용하는 이유: 가장 편리하기 때문
$nvm install > 다운
$nvm ls > 여러 노드 버전이 뜸
$nvm use > 바로 버전이 변경됨
use로 node의 버전을 바꾸더라도 터미널 종료 후 다시 켜면 default버전으로 변경됨.
=> 쭉 변경해서 사용하고 싶다면 default를 변경해야함
최신버전을 사용하지 않고 LTS(longterm support)를 사용하는 이유: LTS가 안전화된 버전이기 때문이다.
=> 하위호환성이 뛰어나다.
remote: 내 컴퓨터가 아닌 곳
github
local:
3명이서 pair프로그래밍을 진행할 때
lint: 코드 룰()
prettier: 코드 형식, 모양(같은 문법을 어떻게 보여줄지의 형식)
=> 같이 연결해서 쓴다면 저장할 때 원하는 방식으로 코드가 저장이 된다.(lint대로 prettir가 고쳐줌)