3

自己実行型の無名関数を定義したいのですが、異なるパラメーターで数回実行します。

(function(x){ console.log(x*x)})(2)
// output: 4

// I know this syntax is wrong, I am
// demonstrating how I would imagine it being implemented
(function(x){ console.log(x*x)})(2)(5)
// output is error, desired output: 4{Newline}25

出来ますか?


編集:@Charmanderからの回答に基づいて、それは可能であり、ほぼ間違いなく悪い考えのようですが、これは私が期待するように機能します...

(function(x){ console.log(x*x); return arguments.callee})(2)(5)
4

2 に答える 2

6

無名関数を変数に格納することもできます。

var someFunction = function(x){
   console.log(x*x);
};

someFunction(5);
someFunction(6);

または、関数をすぐに呼び出される関数式 (iife) にすることに真剣に取り組んでいる場合は、関数自体を返すこともできます。

(function(x){
   console.log(x*x);
   return arguments.callee;
})(5)(6);
于 2012-07-10T23:42:31.243 に答える
1

私はあなたがそれをうまくやることができると思います:

var f = function(x) {
    console.log(x**x);
    return f;
};

f(5)(6)(7);

実際の例については、こちらを参照してください。

http://jsfiddle.net/9qAgr/

さて、私はあなたに認めます。上記は、名前を付けたという意味で、実際には無名f関数ではありません ( ); 文字通り、「関数自体を参照する方法がなくても、これを行うことは可能ですか?」という意味であれば、それから私はそれを疑います。想像力が乏しいだけかもしれませんが(;_;)


JavaScript の機能のおかげで、状態を維持しながら自分自身を返す関数を定義することで、実際にはこれをさらに楽しむことができます (私のようなオタクなら、このサイトにいるのでおそらくそうでしょう)。関数にプロパティを追加するには:

function createCalculator(operation) {
    var result = 0;

    var calculator = function(x) {
        result = operation(x, result);
        return calculator;
    };

    calculator.result = function() {
        return result;
    };

    return calculator;
};

var add = createCalculator(function(x, y) { return x + y; });

console.log(add(1)(2)(3)(4).result());

自分の目で確かめたい場合は、次のデモをご覧ください。

http://jsfiddle.net/9qAgr/1/

于 2012-07-10T23:36:28.437 に答える