Live data from Hacker News

JavaScript Interview Question

cam.ly

61–63 of 63 posts

Re: JavaScript Interview Question

#61
post #58

Earlier quoted context omitted.

I like this question, and I've got something that works, but I'm not sure it's the prefered solution. function say(arg) { return function(word) { alert(arg + " " + word); }; } It solves "hello world", but wouldn't work for something like say("dogs")("and")("cats"). Are you expecting an arbitrary number of function returns?

Yep, that is exactly the solution I would be looking for. I would be blown a way if someone came up with solution that could handle arbitrary function returns. My friend actually wrote an interesting article on the subject. Here's the link if you're interested: http://msdn.microsoft.com/en-US/scriptjunkie/gg575560.aspx

Not exactly the same signature, but can handle arbitrary number of calls.

var say = (function() {

    var savedArgs = [];

    return (function recurse () {

        if (arguments.length) {

            for (var i=0, arg; arg=arguments[i]; i++) {

                savedArgs.push(arg);

            }

            return recurse;

        } else {

            alert(savedArgs.join(' '));

            savedArgs = [];

        }

    });
})();

// e.g. say('Hello')('World')('!!')();

// --> alerts "Hello World !!"

Re: JavaScript Interview Question

#62
why hasn't anyone suggested this: els[i].addEventListener('click', new Function("","alert("+i+");"),false);

it works fine and it's much shorter and easier to read than nested function declarations

Re: JavaScript Interview Question

#63
post #58

Earlier quoted context omitted.

I like this question, and I've got something that works, but I'm not sure it's the prefered solution. function say(arg) { return function(word) { alert(arg + " " + word); }; } It solves "hello world", but wouldn't work for something like say("dogs")("and")("cats"). Are you expecting an arbitrary number of function returns?

Yep, that is exactly the solution I would be looking for. I would be blown a way if someone came up with solution that could handle arbitrary function returns. My friend actually wrote an interesting article on the subject. Here's the link if you're interested: http://msdn.microsoft.com/en-US/scriptjunkie/gg575560.aspx

here's the version I came up with, based on one I did in python. It's very similar to jaysoo's - needs a call with no args to terminate the list. I'm curious if there's a way to do this somehow without the terminator.

I'm not a JS expert by any means, so if I'm doing something stupid in this code, I'd love to know.

  var say = function(word) {
    
    words = [word];

    func = function(word2) {
        if (word2) {
            words.push(word2);
            return func;
        }
        else {
            print(words.join(' '));
        }
    }

    return func;
  };
say('hello')('bob')('how you doing?')();

*note I have the function 'print' aliased to console.log for convenience.

Post reply on HN