WhatisthedifferencebetweenCall,ApplyandBindThedifferencebetweenCall,ApplyandBindcanbeexplainedwithbelowexamples,Call:Thecall()methodinvokesafunctionwithagiventhisvalueandargumentsprovidedonebyonevaremployee1={firstName:"John",lastName:"Rodson"};varemployee2={firstName:"Jimmy",lastName:"Baily"};functioninvite(greeting1,greeting2){console.log(greeting1+""+this.firstName+""+this.lastName+", "+greeting2);}invite.call(employee1,"Hello","How are you?");// Hello John Rodson, How are you?invite.call(employee2,"Hello","How are you?");// Hello Jimmy Baily, How are you?Apply:Invokesthefunctionwithagiventhisvalueandallowsyoutopassinargumentsasanarrayvaremployee1={firstName:"John",lastName:"Rodson"};varemployee2={firstName:"Jimmy",lastName:"Baily"};functioninvite(greeting1,greeting2){console.log(greeting1+""+this.firstName+""+this.lastName+", "+greeting2);}invite.apply(employee1,["Hello","How are you?"]);// Hello John Rodson, How are you?invite.apply(employee2,["Hello","How are you?"]);// Hello Jimmy Baily, How are you?bind:returnsanewfunction,allowingyoutopassanynumberofargumentsvaremployee1={firstName:"John",lastName:"Rodson"};varemployee2={firstName:"Jimmy",lastName:"Baily"};functioninvite(greeting1,greeting2){console.log(greeting1+""+this.firstName+""+this.lastName+", "+greeting2);}varinviteEmployee1=invite.bind(employee1);varinviteEmployee2=invite.bind(employee2);inviteEmployee1("Hello","How are you?");// Hello John Rodson, How are you?inviteEmployee2("Hello","How are you?");// Hello Jimmy Baily, How are you?Callandapplyareprettyinterchangeable.Bothexecutethecurrentfunctionimmediately.Youneedtodecidewhetherit’seasiertosendinanarrayoracommaseparatedlistofarguments.YoucanrememberbytreatingCallisforcomma (separatedlist)andApplyisforArray.WhereasBindcreatesanewfunctionthatwillhavethissettothefirstparameterpassedtobind().