웹(web)/프론트엔드-javascript25 [Execution Context] Function call 함수를 호출한 직후 어떻게 내부적으로 메모리를 관리하는지 살펴보자. 이는 c언어에서의 function call이후 memory에 stack형태로 관리하는 것과 유사하다. js프로그램이 시작되면 프로그램을 위한 공간이 생성된다. 이것이 Runtime Execution Context이고 이 공간은 스택 형태로 관리된다. 이 공간에 전역 코드를 위한 공간인 Global Context가 첫 스택으로 위치한다. 이후 함수를 호출할 때마다 해당 함수에 대한 Context가 스택 형태로 쌓였다가 호출이 끝나면 사라진다. 1. var a= 3; 2. function A(){ 3. } 4. A(); 5. ; 위 코드를 실행하면 어떻게 Runtime Exectuion Context가 이루어질까? (Runtime Execu.. 2020. 6. 3. [Prototype] Prototype Chaining js에서는 클래스 개념이 없고 리터럴 방식이나 생성자로 객체를 생성한다. 이 때 생성된 객체의 부모가 무엇인지 파악해보자. 생성자 함수로 객체를 생성하는 경우 객체의 부모는 생성자 함수의 prototype속성이 참조하는 객체이다. 앞서 생성자 함수는 constructor가 있는 객체를 가리킨다고 한 것을 기억할 것이다. 리터럴로 객체를 생성하는 경우 var a = {} 와 같이 생성하면 내부적으로 Ojbect() 생성자 함수를 사용해 객체를 생성한다. 그리고 a의 부모는 Object 생성자 함수가 prototype속성으로 가리키는 객체이다. 모든 함수는 prototype속성이 있다. a.hasOwnProperty('name'); 이 때 위 코드를 실행할 수 있을까? 답은 그렇다. 왜냐하면 a의 부모인 O.. 2020. 6. 2. [Function] return value 1. 생성자 함수가 아닌 경우 함수에서 리턴값을 지정하지 않으면 어떻게 될까? 답은 undefined가 리턴된다. 2. 생성자 함수인 경우 function A(name){ this.name = name } var foo = new A('bob'); 생성자 함수인 경우 return이 별도로 없으면 생성된 객체를 리턴한다. 즉, name이 'bob'인 객체를 리턴한다. 생성자 함수가 동작하는 방식을 자세히 살펴보면 다음과 같다. 1. 빈 객체 생성 및 this 바인딩 우선 {}로 생성할 때와 비슷하게 빈 객체가 생성되고 this는 이 빈 객체가 된다. 빈 객체라고 해도 [[prototype]]은 있다. 자세한 것은 이후 포스팅에서 다루도록 한다. 2. 코드 실행 필요에 따라 this 속성 값 추가 3. th.. 2020. 6. 1. [Function]this, apply, call arguments 함수에서는 인자 개수가 부족하면 undifined로 된다. 인자 개수에 맞지 않게 다양하게 호출해보면 알 수 있다. this js에서 함수를 보면 this를 많이 사용한다. 굉장히 단순하다. 함수를 호출한 객체가 this이다. var obj = { name : "obj"; add : function(){ console.log(this.name); } } obj.add(); 호출한 객체가 obj이기 때문에 this.name 은 "obj"가 된다. var obj2 = {name: "obj2"}; obj2.fun = obj.add; obj2.fun(); 이렇게 하면 호출한 객체가 obj2이기 때문에 this.name 은 "obj2"가 된다. 객체에서 속성으로 함수를 추가하여 호출하면 this.. 2020. 6. 1. 이전 1 2 3 4 5 6 7 다음