Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 4026156
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 20, 20262026-05-20T10:56:06+00:00 2026-05-20T10:56:06+00:00

I`m a newbie at JavaScript trying to understand this tutorial about currying from Oreilly

  • 0

I`m a newbie at JavaScript trying to understand this tutorial about currying from Oreilly JavaScript Cookbook.

Could someone be kind enough to explain this program in detail step by step in plain language. Please make sure to explain the “null” argument passed in the second last line of the program. Thank you in advance if you can help.

function curry(fn, scope) {
    scope = scope || window;
    var args = [];
    for (var i = 2, len = arguments.length; i < len; ++i) {
        args.push(arguments[i]);
    }
    return function() {
        var args2 = [];
        for (var i = 0; i < arguments.length; i++) {
            args2.push(arguments[i]);
        }
        var argstotal = args.concat(args2);
        return fn.apply(scope, argstotal);
    };
}

function diffPoint(x1, y1, x2, y2) {
    return [Math.abs(x2 - x1), Math.abs(y2 - y1)];
}

var diffOrigin = curry(diffPoint, null, 3.0, 4.0);
var newPt = diffOrigin(6.42, 8.0); //produces array with 3
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-20T10:56:07+00:00Added an answer on May 20, 2026 at 10:56 am
    // define the curry() function
    function curry(fn, scope) {
    
        // set the scope to window (the default global object) if no scope was passed in.
        scope = scope || window;
    
        // Convert arguments into a plain array, because it is sadly not one.
        // args will have all extra arguments in it, not including the first 2 (fn, scope)
        // The loop skips fn and scope by starting at the index 2 with i = 2
        var args = [];
        for (var i = 2, len = arguments.length; i < len; ++i) {
            args.push(arguments[i]);
        }
    
        // Create the new function to return
        return function() {
    
            // Convert any arguments passed to the this function into an array.
            // This time we want them all
            var args2 = [];
            for (var i = 0; i < arguments.length; i++) {
                args.push(arguments[i]);
            }
    
            // Here we combine any args originally passed to curry, with the args
            // passed directly to this function.
            //   curry(fn, scope, a, b)(c, d)
            // would set argstotal = [a, b, c, d]
            var argstotal = args.concat(args2);
    
            // execute the original function being curried in the context of "scope"
            // but with our combined array of arguments
            return fn.apply(scope, argstotal);
        };
    }
    
    // Create a function to be curried
    function diffPoint(x1, y1, x2, y2) {
        return [Math.abs(x2 - x1), Math.abs(y2 - y1)];
    }
    
    // Create a curried version of the diffPoint() function
    //   arg1: the function to curry
    //   arg2: the scope (passing a falsy value causes the curry function to use window instead)
    //   arg3: first argument of diffPoint() to bake in (x1)
    //   arg4: second argument of diffPoint() to bake in (y1)
    var diffOrigin = curry(diffPoint, null, 3.0, 4.0);
    
    // Call the curried function
    // Since the first 2 args where already filled in with the curry, we supply x2 and y2 only
    var newPt = diffOrigin(6.42, 8.0);
    

    In this case the scope argument isn’t used at all. scope sets what the this object is. The function you are currying doesn’t use this so it has no real effect. The scope is set when fn.apply(scope, args) is called, which both sets the scope to run in and provides arguments to pass in.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Total newbie question but this is driving me mad! I'm trying this: myInt =
I'm a mostly-newbie Javascript'er and I'm trying it on a webpage which, upon pressing
i'm quite a newbie in javascript, and i'm spending some time trying to create
Bit of a JavaScript newbie here - I am firing this basic bit of
Newbie to LINQ, and trying to write the following query... select f.Section_ID, f.Page_ID, f.SortOrder,
Sorry for the second newbie question, I'm a developer not a sysadmin so this
Im a newbie in javascript and i really aprecciate any ideas of how i
I'm trying to accomplish what's being demonstrated at this site for an experiment I'm
I am newbie to jQuery , just trying to learn it since last couple
I'm trying to get the values from multiple textboxes using JQuery. I'm a bit

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.