{"data":{"site":{"siteMetadata":{"title":"lastrites2018","author":"lastrites2018","siteUrl":"https://lastrites2018.netlify.com","comment":{"disqusShortName":"","utterances":"lastrites2018/gatsby-first-blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"4939f9e0-2e32-5aa5-8dbf-42ee7bc5b966","excerpt":"함수 객체의 프로퍼티 함수는 객체이다. 따라서, 함수도 프로퍼티를 가질 수 있다. 1. arguments 프로퍼티 매개변수(parameter)는 인수(argument)로 초기화된다. 매개변수의 갯수보다 인수를 적게 전달했을 때(multiply(), multiply(1)) 인수가 전달되지 않은 매개변수는  으로 초기화된다. 매개변수의 갯수보다 인수를 더 많이 전달한 경우, 초과된 인수는 무시된다. arguments…","html":"<h1 id=\"함수-객체의-프로퍼티\"><a href=\"#%ED%95%A8%EC%88%98-%EA%B0%9D%EC%B2%B4%EC%9D%98-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0\" aria-label=\"함수 객체의 프로퍼티 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>함수 객체의 프로퍼티</h1>\n<p>함수는 객체이다. 따라서, 함수도 프로퍼티를 가질 수 있다.</p>\n<h2 id=\"1-arguments-프로퍼티\"><a href=\"#1-arguments-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0\" aria-label=\"1 arguments 프로퍼티 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. arguments 프로퍼티</h2>\n<p>매개변수(parameter)는 인수(argument)로 초기화된다.</p>\n<ul>\n<li>매개변수의 갯수보다 인수를 적게 전달했을 때(multiply(), multiply(1)) 인수가 전달되지 않은 매개변수는 <code class=\"language-text\">undefined</code>으로 초기화된다.</li>\n<li>매개변수의 갯수보다 인수를 더 많이 전달한 경우, 초과된 인수는 무시된다.</li>\n</ul>\n<p>arguments 객체는 배열의 형태로 인자값 정보를 담고 있지만 실제 배열이 아닌 <strong>유사배열객체(array-like object)</strong>이다.</p>\n<p>유사배열객체란 length 프로퍼티를 가진 객체를 말한다. 유사배열객체는 배열이 아니므로 배열 메소드를 사용하는 경우 에러가 발생하게 된다.</p>\n<h2 id=\"2-caller는-자신을-호출한-함수를-의미\"><a href=\"#2-caller%EB%8A%94-%EC%9E%90%EC%8B%A0%EC%9D%84-%ED%98%B8%EC%B6%9C%ED%95%9C-%ED%95%A8%EC%88%98%EB%A5%BC-%EC%9D%98%EB%AF%B8\" aria-label=\"2 caller는 자신을 호출한 함수를 의미 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. caller는 자신을 호출한 함수를 의미</h2>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>func<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">var</span> res <span class=\"token operator\">=</span> <span class=\"token function\">func</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">return</span> res\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token string\">'caller : '</span> <span class=\"token operator\">+</span> bar<span class=\"token punctuation\">.</span>caller\n<span class=\"token punctuation\">}</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>bar<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">/* \n  caller : function foo(func) {\n  var res = func();\n  return res;\n}\n*/</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">//\"caller : null\" bar()를 호출한 함수가 없기 때문에 null을 반영.</span></code></pre></div>\n<h2 id=\"3-함수에서도-length-사용-가능\"><a href=\"#3-%ED%95%A8%EC%88%98%EC%97%90%EC%84%9C%EB%8F%84-length-%EC%82%AC%EC%9A%A9-%EA%B0%80%EB%8A%A5\" aria-label=\"3 함수에서도 length 사용 가능 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 함수에서도 length 사용 가능</h2>\n<p>length 프로퍼티는 함수 정의 시 작성된 매개변수parameter 갯수를 의미한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>foo<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 0</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">bar</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> x\n<span class=\"token punctuation\">}</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>bar<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 1</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">baz</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> x <span class=\"token operator\">*</span> y\n<span class=\"token punctuation\">}</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>baz<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 2</span></code></pre></div>\n<h2 id=\"4-name-프로퍼티\"><a href=\"#4-name-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0\" aria-label=\"4 name 프로퍼티 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. name 프로퍼티</h2>\n<p>함수명을 나타낸다. 기명함수의 경우 함수명을 값으로 갖고 익명함수의 경우 빈 문자열을 값으로 갖는다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 기명 함수표현식(named function expression)</span>\n<span class=\"token keyword\">var</span> <span class=\"token function-variable function\">namedFunc</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span> <span class=\"token function\">multiply</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> a <span class=\"token operator\">*</span> b\n<span class=\"token punctuation\">}</span>\n<span class=\"token comment\">// 익명 함수표현식(anonymous function expression)</span>\n<span class=\"token keyword\">var</span> <span class=\"token function-variable function\">anonymousFunc</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> a <span class=\"token operator\">*</span> b\n<span class=\"token punctuation\">}</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>namedFunc<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">)</span> <span class=\"token comment\">// multiply</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>anonymousFunc<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">)</span> <span class=\"token comment\">// ''</span></code></pre></div>\n<h2 id=\"5-proto-프로퍼티\"><a href=\"#5-proto-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0\" aria-label=\"5 proto 프로퍼티 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. <strong>proto</strong> 프로퍼티</h2>\n<p>ECMAScript spec에서는 <strong>모든 객체는 자신의 프로토타입을 가리키는 [[Prototype]]이라는 숨겨진 프로퍼티를 가진다</strong> 라고 되어있다. 크롬, 파이어폭스 등에서는 숨겨진 [[Prototype]] 프로퍼티가 <strong>proto</strong> 프로퍼티로 구현되어 있다. 즉, <strong>proto</strong>과 [[Prototype]]은 같은 개념이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">square</span><span class=\"token punctuation\">(</span>number<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> number <span class=\"token operator\">*</span> number\n<span class=\"token punctuation\">}</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">dir</span><span class=\"token punctuation\">(</span>square<span class=\"token punctuation\">)</span></code></pre></div>\n<p>square() 함수 역시 객체이므로 [[Prototype]] 프로퍼티(<strong>proto</strong> 프로퍼티)을 가지며 이를 통해 자신의 부모 역할을 하는 프로토타입 객체를 가리킨다.</p>\n<p>함수의 프로토타입 객체는 <code class=\"language-text\">Function.prototype</code>이며 이것 역시 함수이다.</p>\n<h2 id=\"6-prototype-프로퍼티\"><a href=\"#6-prototype-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0\" aria-label=\"6 prototype 프로퍼티 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. prototype 프로퍼티</h2>\n<p>함수 객체만이 가지고 있는 프로퍼티로 자바스크립트 객체지향의 근간이다.</p>\n<p><strong>주의해야 할 것은 함수 객체만이 가지고 있는 prototype 프로퍼티는 프로토타입 객체를 가리키는 [[Prototype]] 프로퍼티(</strong>proto** 프로퍼티)와는 다르다는 것이다.**</p>\n<p>prototype 프로퍼티와 [[Prototype]] 프로퍼티는 모두 프로토타입 객체를 가리키지만 관점의 차이가 있다.</p>\n<ul>\n<li>\n<p>[[Prototype]] 프로퍼티</p>\n<ul>\n<li>모든 객체가 가지고 있는 프로퍼티이다.</li>\n<li><strong>객체의 입장에서 자신의 부모 역할을 하는 프로토타입 객체를 가리키며 함수 객체의 경우 Function.prototype를 가리킨다.</strong></li>\n</ul>\n</li>\n<li>\n<p>prototype 프로퍼티</p>\n<ul>\n<li>함수 객체만 가지고 있는 프로퍼티이다.</li>\n<li><strong>함수 객체가 생성자로 사용될 때 이 함수를 통해 생성된 객체의 부모 역할을 하는 객체를 가리킨다.</strong></li>\n<li>함수가 생성될 때 만들어 지며 <code class=\"language-text\">constructor</code> 프로퍼티를 가지는 객체를 가리킨다. 이 <code class=\"language-text\">constructor</code> 프로퍼티는 함수 객체 자신을 가리킨다.</li>\n</ul>\n</li>\n</ul>\n<p>-> 아직 명확히 이해할 수 있는 개념은 아니다.</p>","frontmatter":{"title":"poiemaweb.com 함수Function의 프로퍼티property","date":"September 03, 2018"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/til/20180903 poiemaweb.com 함수Function의 프로퍼티property/","previous":{"fields":{"slug":"/til/20180901 Node.js 설치하기/"},"frontmatter":{"title":"Node.js 설치하기","category":"TIL"}},"next":{"fields":{"slug":"/til/20180904-20180907 recursion challenge, recursion example/"},"frontmatter":{"title":"recursion challenge, recursion example","category":"TIL"}}}}