Javascript Interview Questions ( Currying ) - Output based Questions, Partial Application and more

Sdílet
Vložit
  • čas přidán 4. 07. 2024
  • #JavascriptInterview #Javascript #FrontendInterview
    Javascript Interview Questions on Currying will be discussed in this video including topics like Infinite currying, curry() implementation, Partial Application, Output based Questions etc.
    🟦 Follow me on Twitter and u will clear your interview 🤓 -
    / piyush_eon
    ⭐ Support the channel and learn from me One on One -
    / @roadsidecoder
    📖 Blog for this video -
    roadsidecoder.hashnode.dev/ja...
    🔗 Closures Video -
    • Javascript Interview Q...
    🔗 Javascript Interview Series -
    • Javascript Interview Q...
    🔗 Cars24 Interview Experience -
    • Frontend Interview Exp...
    🔗 Unacademy Interview Experience -
    • Frontend Interview Exp...
    🔗 MERN Stack Tutorial with Redux -
    • MERN Stack Project Tut...
    🔗 React Beginner's Project Tutorials -
    • React JS Project Tutor...
    -------------------------------------------------------------------------
    00:00 Intro
    00:15 What is Curring in Javascript?
    00:53 Example of Currying
    03:04 Why Currying?
    03:37 Ques 1 - Implement sum(2)(6)(1)
    06:22 Ques 2 - Reusing Variable for logic
    09:29 Ques 3 - Infinite Currying
    13:47 Ques 4 - Currying vs Partial Application
    15:57 Ques 5 - Manipulating DOM
    18:22 Ques 6 - curry() implementation
    24:22 Read the blog for this video
    -------------------------------------------------------------------------
    Special Thanks to our members -
    Srinivas Ayyagari

Komentáře • 104

  • @RoadsideCoder
    @RoadsideCoder  Před 2 lety +5

    Correction for the last question -
    At 22:15 args.length is 1, which of course it is, then I said length of function is 4, and highlighted the four curried functions at line number 22.
    Which is kind of not the case here,
    Here, func is that sum function I passed as prameter to original curry function and func.length would be length or number of parameters that func (sum function) expects.
    Which in this case sum function expects four formal parameters which are:
    a, b, c, d.
    So four comes from here, not from the curried functions in line 22.
    Sorry for the explanation gap.

    • @adityanarayangantayat7133
      @adityanarayangantayat7133 Před 2 lety +2

      Exactly what I was going to comment and ask! Glad to find your comment 😅

    • @adimaralimuddin96
      @adimaralimuddin96 Před rokem +1

      it was the length of the first argument as callback function on the first call.
      if the arg.length == curryArg.length ? then only call the callback function..
      this one is actually very usefull.

  • @woongda
    @woongda Před rokem +1

    this is one of the coolest thing I learn !! I have all those chained http post calls, now I can do post(data1)(data2)(data3)((res) => { something}) without using promise and async/await and at the same time, no callback hell. I can throw error and use try/catch like async/await does.

  • @AmanSingh-qr3ld
    @AmanSingh-qr3ld Před 2 lety +19

    You are putting so much effort to make such topics easy for us. Thanks for putting content like this. We really appreciate it.

  • @rajkishorshaw2379
    @rajkishorshaw2379 Před 11 měsíci +4

    Currying is a function that takes one argument at a time and returns a new function expecting the next argument. It is a conversion of function from callable as f(a,b) to f(a)(b).

  • @chaitanyayash2958
    @chaitanyayash2958 Před rokem +2

    Brother, you are a gem. Thank you so much.

  • @amansaxena4446
    @amansaxena4446 Před rokem +11

    you should also explain this The length data property of a Function instance indicates the number of parameters expected by the function. for some folks it could be possible they couldnt understand how func.length is coming

    • @abhirocks723
      @abhirocks723 Před 4 měsíci

      yes... by the way thank you for explaining

  • @AbhinashKumar-ql3tn
    @AbhinashKumar-ql3tn Před rokem

    impressive teaching methodology..

  • @kartikkaushik4743
    @kartikkaushik4743 Před 7 měsíci

    Nice effort earlier I though it used to be a cuury made inside the kitchen only but in js how to used with the function its great ,brother you are great

  • @ramuramu8910
    @ramuramu8910 Před rokem

    Thanks for u r video with clear explanation.

  • @A1996ARP2075
    @A1996ARP2075 Před 2 lety +12

    Great next make on OOPS concept and prototype related

  • @pravinjohannes7699
    @pravinjohannes7699 Před 2 lety

    Thank you so much sir, it is very much helpful and all your videos have helped to understand the javascript very well especially all your interview videos sir, thank you so much sir

  • @achyutkumarsingh7308
    @achyutkumarsingh7308 Před měsícem

    Thanks for teaching a new concept

  • @engsmyle
    @engsmyle Před rokem

    Thanks you for explaining it very well, I really understand it now 😅...

  • @ankushladani496
    @ankushladani496 Před 2 lety +1

    Great Quality Content....

  • @arjobansingh1940
    @arjobansingh1940 Před 2 lety +6

    Great video, but i guess it was slightly confusing when you said, func.length.
    At 22:15 you said args.length is 1, which of course it is, then you said length of function is 4, and highlighted the four curried functions at line number 22.
    Which is kind of not the case here,
    Actually here func is that sum function you passed as prameter to original curry function and func.length would be length or number of parameters that func (sum function) expects.
    Which in this case sum function expects four formal parameters which are:
    a, b, c, d.
    So four comes from here, not from the curried functions in line 22.
    As according to MDN,
    length is a property of a function object, and indicates how many arguments the function expects, i.e. the number of formal parameters. This number excludes the rest parameter and only includes parameters before the first one with a default value.
    Nonetheless great video!

    • @RoadsideCoder
      @RoadsideCoder  Před 2 lety

      Yes, my bad.. That was a little gap in my explanation, I'll add a pinned comment for correcting this part.

    • @arjobansingh1940
      @arjobansingh1940 Před 2 lety

      @@RoadsideCoder Cool!

  • @dev-suresh
    @dev-suresh Před měsícem

    Super useful video. Thanks

  • @hemantpratapsingh236
    @hemantpratapsingh236 Před 2 lety +2

    This is gold ... 👍👍 Such a quality content . .. keep going brother...

  • @raammeena6650
    @raammeena6650 Před rokem

    Really appriciate you content

  • @user-iz8du7vr4p
    @user-iz8du7vr4p Před 9 měsíci +1

    Deserve a million subscribe

  • @pushpabhandari619
    @pushpabhandari619 Před 2 lety +3

    Thank you sir, your video's is really helpful please continue this interview series

  • @RahulKumar-ew1qw
    @RahulKumar-ew1qw Před 2 lety +1

    Now , watching this type of video, lets hit the interview.. You are best of best .. ,🔥

  • @dailyPractice1
    @dailyPractice1 Před rokem +1

    The best thing about this series is that "You are covering questions topic wise in each separate video", So we can say we covered few question on this or that topic.

  • @anubhavmahajan230
    @anubhavmahajan230 Před rokem

    The last question was epic 🤟

  • @Karansingh_78
    @Karansingh_78 Před rokem

    sir i have a doubt in console.log(add(2)(3)(4)); when remove the last parenthesis it showing output as function [anonymous] , sir what will be reason?

  • @karthikk1098
    @karthikk1098 Před 9 měsíci

    Thank you so much for educating and your videos were super mind game.
    I know you are intended to communicate in simple English and react language.
    Since I am a beginner in JS, just excited to share this the one n only question I solved better.
    const arithOp = {
    add: "+",
    subtract: "-",
    divide:"/",
    multiply:"*"
    }
    function one(type){
    return function(lhs){
    return function(rhs){
    const resultString = `lhs ${arithOp[type]} rhs`;
    console.log(eval(resultString));
    }
    }
    }
    one("add")(3)(3);

    • @RoadsideCoder
      @RoadsideCoder  Před 9 měsíci

      Awesome! Thanks for adding this approach here

  • @master_coder8628
    @master_coder8628 Před 2 lety

    Love your videos. 💙 Please bring fast too

  • @bhushangawandecoder
    @bhushangawandecoder Před 10 měsíci

    in my first call the Hr asked me waht web application do you use....i was noy aware what web applications are...? could you explain me

  • @RoadsideCoder
    @RoadsideCoder  Před 4 měsíci

    🔴 Get my Complete Frontend Interview Prep course - roadsidecoder.com/course-details

  • @fishamit
    @fishamit Před 4 měsíci

    i believe that your example for the "curry" function allows for passing multiple arguments in each subsequent invocation of a curried function. Isn't it more accurate to allow only one argument in each curried call? by removing the rest and spread operators on "next", on lines 11 + 12. 24:16

  • @gkinfos
    @gkinfos Před rokem +1

    in question 5- Manipulating Dom we can get the ref of element in one variable and then keep on updating the content, so why curring adding more sense here?

  • @lifeisbeautifu1
    @lifeisbeautifu1 Před rokem

    Thank you

  • @pkyadav6230
    @pkyadav6230 Před 4 měsíci

    Subscribed❤

  • @DineshVutukuru
    @DineshVutukuru Před 2 lety +2

    07:48, you can use Switch case. It's little better than nested If else loops.

  • @gagansuneja7029
    @gagansuneja7029 Před 18 dny

    My answer for currying
    function sum(args){
    if(args == undefined) {
    let currentSum = sum.currentSum;
    sum.currentSum = 0;
    return currentSum;
    }
    sum.currentSum = (sum.currentSum || 0) + args;
    return sum;
    }

  • @Lavith_kuttu
    @Lavith_kuttu Před rokem

    When the interviewer asked us to write a function for multipler6 (if I have given 3 it should return 18, if 6 then 36 ) this is called partial application.
    const mul = (a=6) => {
    return (b) => {
    return a * b;
    };
    };
    const mul6 = mul();
    console.log(mul6(3));
    console.log(mul6(13));
    console.log(mul6(9));

  • @rahularora9153
    @rahularora9153 Před rokem +1

    Great Work bro, keep it up

  • @atharshakeel7277
    @atharshakeel7277 Před 2 lety

    Great video and very well explained

  • @gurmandeep4417
    @gurmandeep4417 Před 2 lety

    Can u please tell how to solve a error while making a project

  • @siddesh1210
    @siddesh1210 Před 9 měsíci

    Interview has asked me so its become more difficult to write function if we use currying so why we are using it like :
    function add(a,b,c){
    return a+b+c;
    }
    And same if we do currying it will take 2 internal function and than it will return us value.
    So bhaiya how should we answer this questions??

  • @Jatindamariya
    @Jatindamariya Před 24 dny

    Isnt question 5 (dom manipulation) here an example of using closures instead of currying? How does currying link to this question?

  • @Frank-vm7vm
    @Frank-vm7vm Před 2 lety

    Bhai Make video on spread operator tricks

  • @kewalkandpal
    @kewalkandpal Před 2 lety

    🔥🔥🔥

  • @akash_gupta_2090
    @akash_gupta_2090 Před 11 měsíci

    done ... !

  • @TanmayKamath
    @TanmayKamath Před 8 měsíci

    This time in Cars24 i was asked this question. You need to curry add if n number of arguments are placed in any manner after the function:
    sum(1)(2)()()()(3)

    • @user-my4pr2tb2g
      @user-my4pr2tb2g Před 8 měsíci +1

      Only if the last argument is empty we can go for Infinite currying as the tutorial explained if the middle argument is empty it stops there itself and gives result. Anyway what was the answer you gave and how can we solve this problem?

    • @TanmayKamath
      @TanmayKamath Před 8 měsíci

      @@user-my4pr2tb2g Yes using recursion, you have to check whether the arguments is equal to the function length.

  • @BalajiAade-bm7go
    @BalajiAade-bm7go Před 4 měsíci

    Bhaiya please reply in timestamp 15:58 actually I think the example you provide is actually behave like a closure not currying tell me if i am wrong

  • @rahul.sarkar
    @rahul.sarkar Před 2 lety +2

    Please make a video on throttling and debouncing in JavaScript 🥺🙏

  • @akshitatyagi5234
    @akshitatyagi5234 Před 2 lety +1

    So we will need to pass () as blank to stop the recursion in 13:31 otherwise the output is always a function . Is there any way we can do this without adding empty () in the end??

    • @dkatorzaify
      @dkatorzaify Před 2 lety

      Hi, you don't need to pass () as blank. What will stop the recursion is the "if" statement once it will be true, meaning once the number of args will match the number of functions.

    • @akshitatyagi5234
      @akshitatyagi5234 Před 2 lety

      @@dkatorzaify If u will quickly run this in browser console, you can see it is always returning a function. Logic seems okay but its not working, without the ()

    • @dkatorzaify
      @dkatorzaify Před 2 lety

      @@akshitatyagi5234 This is strange... I copied this to the console and it does work.
      function curry(func) {
      return function curriedFunc(...args) {
      if(args.length >= func.length) {
      return func(...args)
      } else {
      return function(...next) {
      return curriedFunc(...args,...next);
      }
      }
      }
      }
      const sum = (a,b,c,d) => a+b+c+d
      const totalSum = curry(sum)
      console.log(totalSum(1)(2)(3)(4))

    • @akshitatyagi5234
      @akshitatyagi5234 Před 2 lety

      @@dkatorzaify I am talking about the example at 13:31

  • @merakshay6086
    @merakshay6086 Před rokem +1

    Hey piyush there is catch in
    function add(a){
    return function(b){
    if(b) return add(a+b)
    return a;
    }
    }
    example
    console.log(add(10)(0)());
    if b = 0 then it does not return any function so its throw an error called
    TypeError: add(...)(...) is not a function
    here is a proper solution
    function add(a){
    return function(b){
    if(b !== undefined) return add(a+b)
    return a;
    }
    }
    thank you _/\_

  • @saipratapdannana8048
    @saipratapdannana8048 Před 2 lety +1

    How much can we demand as front end developer with 1 year experience?

  • @shubamdadhwal3497
    @shubamdadhwal3497 Před rokem +1

    Loved the video bro, although i think there is no need to do:
    1. the rest and spread of next arguement
    2. greater condition check i.e. (args.length >= func.length)
    OR correct me, if i m wrong somewhere
    function curry(func) {
    return function curriedFunc(...args) {
    if (func.length === args.length) {
    return func(...args);
    } else {
    return function (next){
    return curriedFunc(...args, next);
    }
    }
    }
    };
    Also for those who don't know -
    function.length -> returns the EXPECTED number of arguments a function is expecting excluding the default and rest parameter
    arguments.length -> returns the ACTUAL number of arguments passed to a function

  • @ambupadamuduli3794
    @ambupadamuduli3794 Před 2 lety

    Bro jaldi jaldi video daalo

  • @eelguneezmemmedov1671

    Please put the on github sir .

  • @Cuddlehead
    @Cuddlehead Před 3 měsíci

    *okay cool*

  • @pavithrasai1392
    @pavithrasai1392 Před 2 lety

    how much can we demand for frontend developer role with 3.9 yrs of experience?

    • @RoadsideCoder
      @RoadsideCoder  Před 2 lety

      Depends on your skills, sky is the limit.

    • @pavithrasai1392
      @pavithrasai1392 Před 2 lety

      ​@@RoadsideCoder I have experience and knowledge in JS, ReactJS and React Native

  • @biswajitchanda6592
    @biswajitchanda6592 Před 7 měsíci

    const sum = function(a) {
    return function(b) {
    if (b) {
    return sum(a + b);
    } else {
    return a;
    }
    }
    }
    yes we can write that in one line:
    const add = a => b => b ? add(a + b) : a;

  • @santrawebtech35
    @santrawebtech35 Před 2 lety

    how are you sir please make a project on MERN as like dosti chat app

  • @Abhishekverma-yj1or
    @Abhishekverma-yj1or Před 2 lety +1

    My Interview asked me this question ->
    Write a function sum that takes n arguments and can be called n times.
    Note - Function can take n arguments and can be called n times.
    For example -
    sum(1,3,5,1)(1,2,3,4,5)(1)(1,2)(1,1,1,1,1,1)(1,4,5)(12)(11)(50, 51, 52)
    console.log(sum.....) => 221
    It was for SDE - 1 Role.
    I still not able to understand this problem.

    • @Abhishek_Sawant
      @Abhishek_Sawant Před rokem

      const infiniteSum = (...a) => {
      return (...b) => {
      const currSum = [...a, ...b].reduce((sum, val) => sum + val, 0);
      return b.length ? infiniteSum(currSum) : currSum;
      };
      };

    • @Abhishekverma-yj1or
      @Abhishekverma-yj1or Před rokem +1

      @@Abhishek_Sawant Hey thanks man :)

    • @Abhishek_Sawant
      @Abhishek_Sawant Před rokem

      @@Abhishekverma-yj1or 👍😅

    • @sandyGamer97
      @sandyGamer97 Před rokem

      function sum(...args){
      let a = args.reduce((a,b)=>a+b,0);
      return function (...args){
      let b = args.reduce((a,b)=>a+b,0);
      if(b) return sum(a+b);
      return a;
      }
      }

  • @kritigoel3854
    @kritigoel3854 Před rokem +1

    Hi @RoadsideCoder , with infinite currying code, its returning only Function ..not the addition, Could you please clarify.
    function add(a){
    return function(b){
    if(b) return add(a + b);
    return a;
    }
    }
    console.log(add(4)(5)(7));
    OUTPUT: [Function]

    • @sandyGamer97
      @sandyGamer97 Před rokem +1

      it is returning function because you should call like this console.log(add(4)(5)(7)()) ; without (), function does not get invoked and you get only function body

  • @HemantKumar-dl9wh
    @HemantKumar-dl9wh Před rokem

    Hi,
    I've written below code. Is it write wrt to currying?'
    const evalute = a => {
    switch (a) {
    case 'sum':
    return function (b) {
    return function (c) {
    return b + c;
    };
    };
    case 'sub':
    return function (b) {
    return function (c) {
    return b - c;
    };
    };
    default:
    break;
    }
    };
    console.log(evalute('sum')(5)(3));
    console.log(evalute('sub')(5)(3));

  • @anushajammula9837
    @anushajammula9837 Před rokem

    I want theory related and code based questions with pdf

  • @vishalmishra1937
    @vishalmishra1937 Před 9 měsíci

    0:31 🤣

  • @jaisharma545
    @jaisharma545 Před rokem +1

    now legends will only subscribe you because of "69" years of goodluck 🤣

    • @RoadsideCoder
      @RoadsideCoder  Před rokem +1

      Are u that legend?

    • @jaisharma545
      @jaisharma545 Před rokem +1

      @@RoadsideCoder yes I am😂 and thank you from the depth of my heart. for creating such awesome content 💙

    • @RoadsideCoder
      @RoadsideCoder  Před rokem

      @@jaisharma545 welcome 🙏

  • @bhushanbhale3309
    @bhushanbhale3309 Před rokem

    Why 69 years of goodluck..... means why 69 only 😁😁😁