구분 | constructor | prototype | super | arguments |
---|---|---|---|---|
일반 함수 | o | o | x | o |
메서드 | x | x | o | o |
화살표 함수 | x | x | x | x |
const obj = {
x: 1,
// foo() 는 메서드
foo() { return this.x },
// bar에 바인딩된 함수는 일반 함수
bar: function() {return this.x}
};
console.log(obj.foo()); // 1
console.log(obj.bar()); // 1
// 메서드는 인스턴스 생성 불가한 non-constructor
new obj.foo() // TypeError: obj.foo is not a constructor
// prototype 프로퍼티 없음, 프로토타입 생성 불기
obj.foo.hasOwnProperty('prototype'); // false
const base = {
name: 'Kim',
sayHi() {
return `Hi, ${this.name}!`;
}
};
const derived = {
__proto__: base,
sayHi() {
return `${super.sayHi()} How are you doing?`;
}
};
console.log(derived.sayHi()); // Hi, Kim! How are you doing?
//매개변수 한개인 경우 소괄호 생략 가능
const arrow = x => {};
// 매개변수 없는 경우 소괄호 필수
const noParam = () => {};
// 매개변수 여러개면 소괄호, 함수 몸체 하나면 중괄호 생략 가능
const multiply = (x, y) => x * y;
// 반환값 없는 문은 중괄호 필수
const noReturn = () => { const x = 1; };
// 객체 리터럴 반환은 소괄호 필수
const create = (id, content) => ({ id, content });
// 생성자 함수로 호출 불가
const foo = () => {};
new foo(); // TypeError: foo is not a constructor
// prototype 프로퍼티 없고 프로토 타입 생성 안함
foo.hasOwnProperty('prototype'); // false
// 중복된 매개변수 이름 선언 불가
const sum = (a, a) => a + a; // SyntaxError: Duplicate parameter name not allowed in this context
function foo(param1, param2, ...rest) {
console.log(param1); // 1
console.log(param2); // 2
console.log(rest); // 3, 4, 5
}
foo(1, 2, 3, 4, 5);
function foo(...rest) {};
function bar(param1, ...rest) {};
function baz(param1, para2, ...rest) {};
console.log(foo.length); // 0
console.log(bar.length); // 1
console.log(baz.length); // 2
function sum(...args) {
return args.reduce((pre, cur) => pre + cur, 0);
}
console.log(sum(1, 2, 3, 4, 5)); // 15
function sum(x = 0, y = 0) {
return x + y;
}
console.log(sum(1)); // 1
console.log(sum(1, 2)); // 3
function logName(name = 'Kim') {
console.log(name);
}
logName(); // Kim
logName(undefined); // Kim
logName(null); // null
function sum(x, y = 0) {
console.log(arguments);
}
console.log(sum.length); // 1
sum(1); // Arguments { '0': 1 }
sum(1, 2); //arguments { '0': 1, '1': 2 }
이웅모 저자의 <모던 자바스크립트 Deep Dive> 책으로 스터디 하면서 공부한 내용들을 요약 정리해서 올리는 글입니다. 더 자세한 내용이 궁금하신 분들은 책을 봐주세요.