목록Web/자바스크립트 (6)
Jiyong's STUDY
call에 대해서는 this와 함께 이전 게시글에서 다루었다. 이 게시글에서 다룰 call과 apply와 bind는 쓰임세가 다 비스무리 하다. 함수를 호출할 때 this를 바인딩하는 것에서는 다 같은 함수다. 다른 점만 간단하게 확인하고 넘어가도록 하겠다. const foo = { three: 3 } const bar = { addThreeToSum(a, b, c) { return a + b + c + this.three; } } console.log(bar.addThreeToSum.call(foo, 1, 2, 3)); console.log(bar.addThreeToSum.apply(foo, [1, 2, 3])); -- node test.js 9 9 -- call은 다수의 인수를 전달하지만, apply..

this는 객체를 가리키는 포인터와 같은 존재라고 볼 수 있다. 기본적으로 this가 가리키고 있는 것은 전체를 가리키고 있는데, 브라우저의 경우 window를, node.js의 경우에는 global을 가리킨다. 객체 안에서 this를 사용하면 다음과 같이 사용된다. const a = { foo: 'foo', bar: 'bar', f1: function() { return this.foo; }, f2: function() { return this.bar; }, f3: function () { return this; } } console.log(a.f1()); console.log(a.f2()); console.log(a.f3()); -- node test.js foo bar { foo: 'foo', ba..

test1(); function test1() { console.log('test1'); } -- node test.js test1 -- test1의 선언보다 호출을 먼저 했지만 정상적으로 실행이 된다. test2(); var test2 = function() { console.log('test2'); } -- node test.js /Users/jiyong/WebstormProjects/study-types/test.js:6 test2(); ^ TypeError: test2 is not a function -- 마찬가지로 선언보다 호출을 먼저 했지만 오류가 난다. 두 개의 차이는 일반 함수와 인라인 함수에서 나는 차이긴 하지만, 아무튼 호이스팅이 적용된 결과라고 볼 수 있다. test2(); let t..
클로저는 함수와 함수가 선언된 렉시컬 환경과의 조합이라고 한다. 클로저를 알기 위해서는 렉시컬 환경과 실행 컨텍스트에 대해서 알고 있어야만 비로소 알 수 있는 것이라고 말할 수 있다. function init() { var name = "Mozilla"; // name is a local variable created by init function displayName() { // displayName() is the inner function, a closure alert (name); // displayName() uses variable declared in the parent function } displayName(); } init(); // Mozilla에서 Closure를 설명하며 든 예시 ..

https://velog.io/@woobuntu/실행-컨텍스트렉시컬-환경과-this 실행 컨텍스트(렉시컬 환경과 this) ES3의 '중첩 스코프'와 비교하여 ES5의 '렉시컬 환경'개념에 대해 알아보고, 나아가 this바인딩에 대해서도 살펴본다. velog.io 해당 글은 위 링크를 보고 공부하고 이해한 내용을 정리한 글입니다. 그리고 해당 글의 예제들이 ES 문법으로 작성되지는 않았지만 해당 글에서는 ES6+ 문법에서의 컨텍스트도 다루겠습니다. 틀린 부분이 많을 수 있으니 지적해주시면 감사하겠습니다. 실행 컨텍스트: { 렉시컬 환경 컴포넌트: { 렉시컬 환경: { 환경 레코드: { 선언적 환경 레코드: { // 글로벌 스코프에서는 오브젝트 환경 레코드 // 현재 스코프에 선언된 변수와 함수들이 식별되..
기본적으로, 자바스크립트의 함수는 객체이다. 이 부분은 다 알 것이라 생각한다. 1. 일급 함수 그리고 일급 객체이자 일급 함수이다. 여기서 '일급' 이라는 형용사는 값으로 다룰 수 있음을 나타낸다. 즉 '일급'의 조건은 - 변수에 담을 수 있다. - 함수나 메서드의 인자로 넘길 수 있다. - 함수나 메서드에서 리턴할 수 있다. 또한 자바스크립트에서 모든 값은 일급이다. 자바스크립트의 객체도 모두 일급 객체다. 그럼 일급 함수는 무엇인가? 추가적인 조건이 있다. - 아무 때나(런타임에서도) 선언이 가능하다. - 익명으로 선언할 수 있다. - 익명으로 선언한 함수도 함수나 메서드의 인자로 넘길 수 있다. 자바스크립트의 함수는 위 조건을 모두 만족한다. 이제 '자바스크립트에서' 라는 전치사는 생략하겠다. 함..