{"componentChunkName":"component---src-templates-blog-post-js","path":"/what-is-call-bind-apply-in-javascript","result":{"data":{"markdownRemark":{"id":"d9d55ecf-df73-5be1-af1f-ddcb87a5cfe4","html":"<p>Hey guys,</p>\n<p>So you might have heard about these famous methods especially the bind method as it used so much, so let's try and understand about these</p>\n<h2>Call and Apply</h2>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">greeting</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"hello\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token function\">greeting</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// hello</span>\n<span class=\"token function\">greeting</span><span class=\"token punctuation\">.</span><span class=\"token function\">call</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">//hello</span>\n<span class=\"token function\">greeting</span><span class=\"token punctuation\">.</span><span class=\"token function\">apply</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">//hello</span></code></pre></div>\n<p>This is a very simple code that I have written, it's just a function named greeting but at the end, you might realize something you could have not seen before, I am not talking about the normal function call greeting but when we use call and apply</p>\n<p>As you see from the code snippet that I have also written the output of the function call so the first that we regularly use is the normal function call and it outputs hello but the next is also a function call which we use doing the call method and it gives the same output as hello and lastly using apply method we also get the same output</p>\n<p>Well underneath the hood JS uses .call() method where a function is invoked that means greeting.call() is always used and greeting() is just the shortcut way to write that\nAnd when we use apply it gives the same result</p>\n<p>We have seen the result of using call and apply but now let's see how they can be useful</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> student1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span> <span class=\"token string\">\"Harry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">60</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\t\t <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>percent <span class=\"token operator\">=</span> <span class=\"token number\">100</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\nstudent1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>What I have done here is I have defined an object named student1 and given name and percent and also an increment method to it so that the percent can be incremented whenever the method is called( if you don't know about the \"this\" keyword please refer to <a href=\"https://www.aviatecoders.com/how-this-keyword-works-in-javascript\">this</a><a href=\"https://developersdomain.netlify.app/how-this-keyword-works-in-javascript\"> </a>article)</p>\n<p>Now what I want to do is used use increment method of the student1 and use it for another object named student2</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> student1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span> <span class=\"token string\">\"Harry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">60</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\t\t <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>percent <span class=\"token operator\">=</span> <span class=\"token number\">100</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> student2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span><span class=\"token string\">\"Marry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">30</span>\n<span class=\"token punctuation\">}</span>\n\nstudent1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nstudent1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">.</span><span class=\"token function\">call</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">)</span> </code></pre></div>\n<p>If you run this code in your editor, you will find out that the percent of student2 has increased to 100 and that is the benefit of using the call function is that we don't have to repeat the method in every object that needs it and helps in writing DRY code</p>\n<p>Also, the call method can accept parameters like so</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> student1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span> <span class=\"token string\">\"Harry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">60</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">num1<span class=\"token punctuation\">,</span> num2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\t\t <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>percent <span class=\"token operator\">+=</span> num1 <span class=\"token operator\">+</span> num2\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> student2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span><span class=\"token string\">\"Marry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">30</span>\n<span class=\"token punctuation\">}</span>\n\nstudent1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>student1<span class=\"token punctuation\">.</span>percent<span class=\"token punctuation\">)</span> <span class=\"token comment\">//90</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">.</span>percent<span class=\"token punctuation\">)</span> <span class=\"token comment\">//30</span>\nstudent1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">.</span><span class=\"token function\">call</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">,</span> <span class=\"token number\">20</span><span class=\"token punctuation\">,</span><span class=\"token number\">50</span><span class=\"token punctuation\">)</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">.</span>percent<span class=\"token punctuation\">)</span> <span class=\"token comment\">//100</span></code></pre></div>\n<p>And the output will be 100 for student2 and 30 for student1</p>\n<p>Now we know what call does and now let's see what apply does differently from the same example</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> student1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span> <span class=\"token string\">\"Harry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">60</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">num1<span class=\"token punctuation\">,</span> num2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\t\t <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>percent <span class=\"token operator\">+=</span> num1 <span class=\"token operator\">+</span> num\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> student2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span><span class=\"token string\">\"Marry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">30</span>\n<span class=\"token punctuation\">}</span>\n\nstudent1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">//90</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">.</span>percent<span class=\"token punctuation\">)</span> <span class=\"token comment\">//30</span>\nstudent1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">.</span><span class=\"token function\">apply</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token number\">20</span><span class=\"token punctuation\">,</span><span class=\"token number\">50</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">.</span>percent<span class=\"token punctuation\">)</span> <span class=\"token comment\">//100</span></code></pre></div>\n<p>Well apply doesn't do anything much different it just changes the way we pass argument using apply we pass arguments through an array but it returns the same result</p>\n<p>Now if you want to choose whether to use call or apply it depends on how to want to pass the arguments, if you want to pass them as an array then use apply, if you want to pass normally use call</p>\n<p>Also as you can see from the above example the method increment has the \"this\" keyword which helps us to use it in other objects as well, if a method doesn't have that can't use it</p>\n<h2>Bind method</h2>\n<p>Moving on to the bind part and what it does let's see</p>\n<p>Well unlike call and apply which instantly give the output, bind on the other hand return a function</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> student1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span> <span class=\"token string\">\"Harry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">60</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">num1<span class=\"token punctuation\">,</span> num2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\t\t <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>percent <span class=\"token operator\">+=</span> num1 <span class=\"token operator\">+</span> num2\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> student2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n\tname<span class=\"token operator\">:</span><span class=\"token string\">\"Marry\"</span><span class=\"token punctuation\">,</span>\n\tpercent<span class=\"token operator\">:</span><span class=\"token number\">30</span>\n<span class=\"token punctuation\">}</span>\n\nstudent1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">//90</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">.</span>percent<span class=\"token punctuation\">)</span> <span class=\"token comment\">//30</span>\n<span class=\"token keyword\">const</span> incrementedStudent2 <span class=\"token operator\">=</span> student1<span class=\"token punctuation\">.</span><span class=\"token function\">increment</span><span class=\"token punctuation\">.</span><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">,</span> <span class=\"token number\">20</span><span class=\"token punctuation\">,</span><span class=\"token number\">50</span><span class=\"token punctuation\">)</span>\n<span class=\"token function\">incrementedStudent2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>student2<span class=\"token punctuation\">.</span>percent<span class=\"token punctuation\">)</span> <span class=\"token comment\">//100</span></code></pre></div>\n<p>So bind helps us to store the borrowed method for later use in form of a new function</p>\n<p>You might have seen the bind method being used for the 'this' keyword, which is a common thing that bind method is used for</p>\n<p>Let me explain the bind method passes the \"this\" keyword which refers to a certain object as an argument to itself, it's like storing the \"this\" keyword for later use and returning a function</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> singer <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  name<span class=\"token operator\">:</span><span class=\"token string\">\"Joy\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function\">sing</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"1\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">var</span> <span class=\"token function-variable function\">singAgain</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\tconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"2\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">return</span> <span class=\"token function\">singAgain</span><span class=\"token punctuation\">.</span><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\nsinger<span class=\"token punctuation\">.</span><span class=\"token function\">sing</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>This is an example that I used while explaining the \"this\" keyword</p>\n<p>So in this, as you can see I have used the bind method to store or bind the \"this\" keyword which refers to the object singer because if you see carefully it is not inside the function singAgain( ) it's inside the sing function where the \"this\" keyword still refers to the object singer</p>\n<p>Now as we know that the bind function stores the value for later use and binds it to the particular function it is attached to and then returns a function</p>\n<p>If you run this code inside the console you will see that both the first console.log and second refer to the same object which is the singer object</p>\n<p>And if any of you are wondering why is singer.sing()() is called twice well because if you only do like singer.sing() then it just returns the singAgain function it doesn't invoke it, so to invoke we have to again call it</p>\n<p>Was the article helpful? Do you have any doubts? Any topic you would like us to cover?</p>\n<p>Reach out to us on <a href=\"https://twitter.com/kartikey_yadav7\"></a><a href=\"https://twitter.com/aviatecoders\">Twitter</a> and <a href=\"https://instagram.com/aviatecoders\">Instagram</a> where we try to provide more value in threads and carousal formats</p>\n<p>Thank You for your time</p>\n<p>Keep learning, Keep coding :)</p>\n<!--EndFragment-->","excerpt":"Hey guys, So you might have heard about these famous methods especially the bind method as it used so much, so let's try and understand about these…","frontmatter":{"date":"April 10, 2021","slug":"/what-is-call-bind-apply-in-javascript","title":"Call, Bind and Apply In Javascript","description":"Many developers get confused or don't understand the basics of call, bind, and apply, in this article, you will understand everything related to call, bind and apply","featuredImage":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAADA0lEQVQ4yz1TyW4TQRTsnhnP4m1sJ2PjOLEdiBOCQ4z3sU2iBBKyO4vBZAEEQYhFICSEuIEEggsXLiAhbiBx4Wf4Cm5IfEJRbZbDU4+m36v3qrqekOlVCO8CRGIOItaGiDYgwhXIUAlacBYyWIQePAPDOQNpz0BaZbhOE6bdhIjMQ3obkCM9iLEDiNwRhJa9DJnZgklgk8CaAnZ9mATWIxUI/RyEqDIaf8JuwLJ9BgFDbcihS9BObBPjCsToVeZMHkOOH8DO9mBnNqGlliGGFyAT5yGCDVTrZfR2Sri8O4tqrQwRaMCItmE5PjSLDaLzMIZXIVNdyPQuAYuPIaYfwCocwzp5CC27x44r0F3Sly18+TAF/BoFfo7i8/tJFjRhhJrQSDsYalEGRX0OMr7EaVd4P3UHcvo+pDrzhxBJUg+fR4DJqvjrxwJ+fE/h3csInj7MQ1gEMGsIRNqw3Q5MTmko0KA/kEDI/BH0LPl7q4NOglQGYdd52cS7NzP49imDt8+TuHHACamfsOr/Q6OmAaUrv0317x+AyUSTpyQVEahBD/nwxlY4hY8TuUXEkj7cZAeJ9NJgwj+P04TDOiPUoUuWoKW3CUhUdaEzDGUHswEnNockwQxFW68SiMmKjlZFmA8WV6BsGqA0treGQH4fonAL4vQ95rDTwFMBWkMvIza0AG9keUBFmIpCCRFvgZ78m8N/0dQFuNk1iBRjjHLlDv4C3iUgdTOdDlwmqe6FqR2kc0zUygTxkSt0USjuIUWARObSgK6RmMeUfxPRiR6GTu9jpHobBq0nT11jnbcO6S5jfLqPRvsWdnpPUazQoHoFDmmubzzC1s4T7F15hprPAqcGy1vEYvcx9m+/wu61F+gdv4ZXug6RoQ81tTbJLuITfcSzNCd1M8ItOE4Ldphi0xaSD6SFOVm0DsdtQYu3EcxchDe+zpo1RPKbXD+yGtmkRGoHM31YuT705Ab3eA4GH8pQtnG4enaJ5yzjLL02y5Ws8eWbg/UUUboixqZx2o1TC27Zb22AcYspd3rUAAAAAElFTkSuQmCC","aspectRatio":1.502145922746781,"src":"/static/1ba1fbf35cd04d930f9ecfbf2612f45f/03979/callbindapply-cover.png","srcSet":"/static/1ba1fbf35cd04d930f9ecfbf2612f45f/6cdeb/callbindapply-cover.png 350w,\n/static/1ba1fbf35cd04d930f9ecfbf2612f45f/b1dd8/callbindapply-cover.png 700w,\n/static/1ba1fbf35cd04d930f9ecfbf2612f45f/03979/callbindapply-cover.png 800w,\n/static/1ba1fbf35cd04d930f9ecfbf2612f45f/1783d/callbindapply-cover.png 1050w,\n/static/1ba1fbf35cd04d930f9ecfbf2612f45f/942ca/callbindapply-cover.png 1400w,\n/static/1ba1fbf35cd04d930f9ecfbf2612f45f/b5274/callbindapply-cover.png 3000w","sizes":"(max-width: 800px) 100vw, 800px","maxHeight":533,"maxWidth":800},"sizes":{"src":"/static/1ba1fbf35cd04d930f9ecfbf2612f45f/ee604/callbindapply-cover.png"}}}}}},"pageContext":{"id":"d9d55ecf-df73-5be1-af1f-ddcb87a5cfe4","previous":{"id":"75ee8fb3-5387-5211-8eb5-4e4aed5f336f","frontmatter":{"slug":"/how-this-keyword-works-in-javascript","template":"blog-post","title":"This Keyword In JavaScript"}},"next":{"id":"cca980b8-bdd7-5605-9e65-5ae67841853e","frontmatter":{"slug":"/what-is-closures-in-javascript","template":"blog-post","title":"Closures | Javascript"}}}},"staticQueryHashes":["228695001","3868140423"]}