다시 보는 call, apply, bind 차이
2021. 1. 7. 21:04ㆍ기초 Java Script
call 과 apply, bind는 함수를 호출하면서 첫번째 인자로 전달하는 객체에 this를 바인딩 할 수 있습니다. call과 apply를 통해서 함수를 실행하면, 함수를 바로 실행하면서 유사 배열 객체인 arguments 객체에 배열 매소드를 사용할 수 있습니다. 하지만 bind 함수를 실행하지 않고 새로운 함수를 반환하기 때문에 비동기적 코드 실행에 유리합니다.
call
function steak (spice) {
console.log(`오늘 요리는 ${this.meat} 스테이크에 ${spice}를 뿌린 스테이크입니다.`)
}
const food = {
meat : '소고기'
};
steak.call(food, '후추');
//오늘 요리는 소고기 스테이크에 후추를 뿌린 스테이크입니다.
apply
call과 비슷하지만 다른 점은 인자를 배열 형태로 가져옵니다. 이때 배열 자체로 전달하는 것이 아니라 배열의 요소를 전달한다.
function steak (spice, flavor, color) {
console.log(`오늘 요리는 ${this.meat} 스테이크에 ${spice}를 뿌린 스테이크입니다.`)
console.log(`${flavor}맛이 나고 ${color}빛깔이 맛나보이네요.`)
}
const food = {
meat : '소고기'
};
steak.apply(food, ['후추', '버터', '노스름한']);
//오늘 요리는 소고기 스테이크에 후추를 뿌린 스테이크입니다.
//버터맛이 나고 노스름한빛깔이 맛나보이네요.
bind
bind도 첫 번째 인자에 this를 바인딩한다는 점은 같지만, 함수를 바로 실행하지 않기 때문에 따로 함수를 실행해줘야한다.
function steak (spice, flavor, color) {
console.log(`오늘 요리는 ${this.meat} 스테이크에 ${spice}를 뿌린 스테이크입니다.`)
console.log(`${flavor}맛이 나고 ${color}빛깔이 맛나보이네요.`)
}
const food = {
meat : '소고기'
};
const test = steak.bind(food, '후추');
test('버터', '노르스름한');
//오늘 요리는 소고기 스테이크에 후추를 뿌린 스테이크입니다.
//버터맛이 나고 노스름한빛깔이 맛나보이네요.
'기초 Java Script' 카테고리의 다른 글
TDD를 생각한다면 꼭 한 번 먼저 봤으면 하는 이야기 ft.이규원 TDD 강의 (0) | 2022.10.20 |
---|---|
더 깊게 생각해보는 map 와 forEach의 차이점 (0) | 2021.01.11 |
🎯Asynchronous & Promise 비동기적 사고!🎱 (0) | 2020.09.21 |
🤔 Instantiation Patterns / 그대 class가 없던 시절을 기억하는가?🙁 (0) | 2020.09.10 |
🧑🏼🚒절차 지향 VS 객체 지향 / Procedural Programming vs OOP( Object Oriented Programming)👮🏻♂️ (0) | 2020.09.09 |