๐ ์ผ๊ธ ๊ฐ์ฒด
- ๋ฌด๋ช ์ ๋ฆฌํฐ๋ด๋ก ์์ฑํ ์ ์๋ค.(๋ฐํ์์ ์์ฑ์ด ๊ฐ๋ฅ)
- ๋ณ์๋ ์๋ฃ๊ตฌ์กฐ(๊ฐ์ฒด, ๋ฐฐ์ด)์ ์ ์ฅํ ์ ์๋ค.
- ํจ์์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌํ ์ ์๋ค.
- ํจ์์ ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๋ ์์ ๊ฐ์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ ์ผ๊ธ ๊ฐ์ฒด์ด๋ค.
์ด๋ ํจ์๋ฅผ ๊ฐ์ฒด์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋๋ฐ,๊ฐ์ฒด๋ ๊ฐ์ด์ด๋ฏ๋ก ํจ์๋ ๊ฐ๊ณผ ๋์ผํ๊ฒ ์ทจ๊ธํ ์ ์๋ค.
๊ทธ๋์ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ ๊ณณ์ด๋ผ๋ฉด ์ด๋์๋ ์ง ๋ฆฌํฐ๋ด๋ก ์ ์ํ ์ ์๊ณ , ๋ฐํ์์ ํจ์ ๊ฐ์ฒด๋ก ํ๊ฐ๋๋ค.
์๋๋ ๊ฐ์ด ์ฌ์ฉ๋๋ ๊ณณ์ด๋ค.
- ๋ณ์ ํ ๋น๋ฌธ
- ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ
- ๋ฐฐ์ด์ ์์
- ํจ์ ํธ์ถ์ ์ธ์
- ํจ์ ๋ฐํ๋ฌธ
์ผ๊ธ ๊ฐ์ฒด๋ก์ ํจ์๊ฐ ๊ฐ์ง๋ ๊ฐ์ฅ ํฐ ํน์ง์ ํจ์์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌํ ์ ์๊ณ ,
ํจ์์ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ธ๋ฐ ์ด๋ฐ ํน์ง์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
ํจ์ ๊ฐ์ฒด๋ ํธ์ถํ ์ ์๋ค๋ ์ , ์ผ๋ฐ ๊ฐ์ฒด์๋ ์๋ ํ๋กํผํฐ๋ฅผ ์์ ํ๋ค๋ ์ ์ด ์ผ๋ฐ ๊ฐ์ฒด์์ ์ฐจ์ด์ ์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
์์ ํจ์์ ๋ณด์กฐ ํจ์์ ์กฐํฉ์ ํตํด ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ถ์ ํจ๊ณผ๋ฅผ ์ต์ํํด์ ๋ถ๋ณ์ฑ์ ์งํฅํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์.
- ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ์กฑ๋ฌธ ์ ๊ฑฐ๋ฅผ ํตํด ๋ณต์ก์ฑ์ ํด๊ฒฐํ๊ณ ,
- ๋ณ์ ์ฌ์ฉ์ ์ต์ ํ๊ฑฐ๋ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ต์ํํด์ ํผํด ์ค๋ฅ๋ฅผ ์ต์ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํจ.
- ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ด๋ ค๋ ๋ ธ๋ ฅ์ ์ผํ.
๐ ํจ์ ๊ฐ์ฒด์ ํ๋กํผํฐ(์ผ๋ฐ ๊ฐ์ฒด์๋ ์๋ ํ๋กํผํฐ)
์ด๋ฆ๊ณผ ๋์ด๋ฅผ ์ ๋ ฅ๋ฐ์ผ๋ฉด ์๊ธฐ์๊ฐ๋ฅผ ํ๋ ํจ์ introduce์ ํ๋กํผํฐ๋ฅผ
console.dir์ Object.getOwnPropertyDescriptors ๋ฉ์๋๋ก ๊ฐ๊ฐ ํ์ธํด๋ณด์.
function introduce(name, age){
return `์๋
ํ์ธ์ ์ ์ด๋ฆ์ ${name}์ด๊ณ , ๋์ด๋ ${age}์ด ์ด์์.`
}
console.dir(introduce) // ์๋ ์ฌ์ง์ ์ฐธ๊ณ
console.log(Object.getOwnPropertyDescriptors(introduce)) // ์๋ ์ฌ์ง์ ์ฐธ๊ณ
arguments, caller, length, name, prototype์ ํจ์ ๊ฐ์ฒด ๊ณ ์ ์ ํ๋กํผํฐ๋ค.
๐ฑ arguments
ํจ์ ๊ฐ์ฒด์ arguments ํ๋กํผํฐ ๊ฐ์ arguments ๊ฐ์ฒด๋ค.
arguments ๊ฐ์ฒด๋ ํจ์ ํธ์ถ ์ ์ ๋ฌ๋ ์ธ์๋ค์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์ํ ๊ฐ๋ฅํ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์ด๋ค.
์ฐธ๊ณ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋งค๊ฐ๋ณ์์ ์ธ์์ ๊ฐ์๊ฐ ์ผ์นํ์ง ์์๋ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค.
arguments์ Symbol.iterator ํ๋กํผํฐ๋ arguments ๊ฐ์ฒด๋ฅผ ์ํ ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ์ธ ์ดํฐ๋ฌ๋ธ๋ก ๋ง๋ค๊ธฐ ์ํ ํ๋กํผํฐ์ด๋ค.
arguments ๊ฐ์ฒด๋ ๋งค๊ฐ๋ณ์ ๊ฐ์๋ฅผ ํ์ ํ ์ ์๋ ๊ฐ๋ณ ์ธ์ ํจ์๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ค.
function sum(){
let sum = 0;
for(let i = 0; i < arguments.length; i++){
res += arguments[i];
}
return res;
}
console.log(sum()); // 0
console.log(sum(1, 2)); // 3
๐ฑ caller
caller ํ๋กํผํฐ๋ ํจ์ ์์ ์ ํธ์ถํ ํจ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
function foo(func){
return func();
}
function bar(){
return 'caller : ' + bar.caller;
}
console.log(foo(bar)); // caller : function foo(func) { ... }
console.log(bar()); // caller : null
๐ฑ length
ํจ์ ๊ฐ์ฒด์ length ํ๋กํผํฐ๋ ํจ์๋ฅผ ์ ์ํ ๋ ์ ์ธํ ๋งค๊ฐ๋ณ์์ ๊ฐ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ผ๋ก
arguments ๊ฐ์ฒด์ length ํ๋กํผํฐ์ ๋ค๋ฅผ ์ ์๋ค. (๋งค๊ฐ๋ณ์๋ฅผ ์ด๊ณผํ๋ ๊ฒ๊ณผ ๊ด๊ณ ์์ด ๋ชจ๋ ์ธ์์ ๊ฐ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.)
๐ฑ name ํ๋กํผํฐ
ํจ์ ๊ฐ์ฒด์ name ํ๋กํผํฐ๋ ํจ์ ์ด๋ฆ์ ๋ํ๋ด๊ณ es5, es6๊ฐ ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
var namesFunc = function foo(){
console.log(namedFunc.name); // foo
}
var anonymousFunc = function(){};
// es5 : name ํ๋กํผํฐ๋ ๋น ๋ฌธ์์ด
// es6 : name ํ๋กํผํฐ๋ ํจ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์ ์ด๋ฆ์ ๊ฐ์ผ๋ก ๊ฐ์ง
console.log(anonymousFunc.name); // anonymousFunc
๐ฑ __proto__ ์ ๊ทผ์ ํ๋กํผํฐ
๋ชจ๋ ๊ฐ์ฒด๋ [[Prototype]]์ด๋ผ๋ ๋ด๋ถ ์ฌ๋กฏ์ ๊ฐ๋๋ฐ, ์ด๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์์ ๊ตฌํํ๋ ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
__proto__ ํ๋กํผํฐ๋ [[Prototype]] ๋ด๋ถ ์ฌ๋กฏ์ด ๊ฐ๋ฆฌํค๋ ํ๋กํ ํ์ ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ ๊ทผ์ ํ๋กํผํฐ๋ค.
const obj = {a : 1};
console.log(obj.__proto__ === Object.prototype); // true
console.log(obj.hasOwnProperty('a')); // true
console.log(obj.hasOwnProperty('__proto__')); // false
๐ฑ prototype ํ๋กํผํฐ
prototype ํ๋กํผํฐ๋ ์์ฑ์ ํจ์๋ก ํธ์ถํ ์ ์๋ ํจ์ ๊ฐ์ฒด. ์ฆ constructor๋ง์ด ์์ ํ๋ ํ๋กํผํฐ๋ค. prototype ํ๋กํผํฐ๋ ํจ์๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์์ฑ์ ํจ์๋ก ํธ์ถ๋ ๋ ์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค์ ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] Webpack (0) | 2021.12.11 |
---|---|
[JavaScript] ์์ฑ์ ํจ์ (0) | 2021.11.21 |
[JavaScript] ๋นํธ์ธ ๊ฐ์ฒด (0) | 2021.11.05 |
[JavaScript] Symbol (0) | 2021.10.23 |
[JavaScript]์ ์ญ ๋ณ์์ ๋ฌธ์ ์ (0) | 2021.10.06 |