반응형

📝setTimeout, setInterval

function fn(name) {
    console.log(`say my name ${name}`);
}

setTimeout(fn, 3000, 'Mike[Timeout]');    // 3초 후에 fn 함수 작동
setInterval(fn, 1000, 'Mike [Interval]'); // 매 1초 fn 함수 작동

setTimeoutms 후에 동작하게끔 지연이 가능합니다

setInterval매 ms 마다 계속 동작하는 기능을 제공합니다

 

📝call, apply, bind

const mike = {
    name : "Mike",
    age : 20
}

const tom = {
    name : "Tom",
    age : 10
}

function showThisName() {
    console.log(`name : ${this.name}, age : ${this.age}`);
}

showThisName();          // name : undefined, age : undefined
showThisName.call(mike); // name : Mike, age : 20
showThisName.call(tom);  // name : Tom, age : 10

call 함수모든 함수가 사용이 가능하며 해당 함수에 this값을 줄 수 있습니다.

showThisName에는 name과 age라는 값이 없지만 mike랑 tom을 불러서(call) 값을 할당해줍니다

 

function update(birthYear, occupation) {
    this.birthYear = birthYear;
    this.occupation = occupation;
}

update.call(mike, 1999, "singer");
console.log(mike); // { name: 'Mike', age: 20, birthYear: 1999, occupation: 'singer' }

update.apply(tom, [1900, "teacher"]);
console.log(tom); // { name: 'Tom', age: 10, birthYear: 1900, occupation: 'teacher' }


const num = [3, 10, 1, 6, 4];
const minNum = Math.min.apply(null, num);
const maxNum = Math.max.call(null, ...num);
console.log(`min : ${minNum}, max : ${maxNum}`); // min : 1, max : 10

applycall하고 하는 행위가 동일한데 매개변수를 배열로 받습니다

update.call(mike, 1999, "singer")를 보면 update함수 안에 mike가 주소 매핑됩니다 그래서 update에서 필드를 추가하거나 할 때 mike에 직접적인 영향을 끼칩니다 (주소 매핑이기 때문에) 1999와 singer는 update의 매개변수입니다 즉, call(this값, 해당 함수의 매개변수들...) 이런 식으로 사용합니다

 

const user = {
    name: "Mike",
    showName : function () {
        console.log(`hello, ${this.name}`);
    }
};

user.showName(); // hello, Mike

let fn = user.showName;
fn();            // hello, undefined

fn.call(user);  // hello, Mike
fn.apply(user); // hello, Mike

let boundFn = fn.bind(user);
boundFn();      // hello, Mike

bind의 경우 this를 영구히 가질 수 있는 함수로 만들어줍니다 call하고 apply하고 매우 유사해보이는데 call과 apply의 경우 해당 함수를 새롭게 만들진 않지만 bind의 경우 새로운 함수를 만듭니다 (boundFn) 그 곳에는 this로 선정한 객체가 들어갑니다

 

반응형