2

次のコードを想像してみてください。

fruitMixer = function(fruitHandler, action){
    // get the given arguments in fruitHandler
    var args = fruitHandler.arguments;

    // retrieve these arguments outside the fruitHandler function
    if(args[0] == undefined) return;
    var action = args[0]['action'];

    // do something if it wants to mix
    if(action == 'mix'){
        fruitHandler(args);
    }else{
        // do other stuff
    }
}
fruitMixer(function({
    'action': 'mix',
    'apples': 3, 
    'peaches': 5}
    ){
        // mix the fruits
    });

私がやろうとしているのは、指定された無名関数の外部のパラメーターを取得することです。これらのパラメータを使用すると、上記のようなことができます。

関数自体の外部で引数にアクセスできないという理由だけで、このコードが機能しないことはわかっています。しかし、これを行う別の方法や回避策があるかどうか疑問に思っていましたか?

4

2 に答える 2

2

行うべき明白なことは、ハンドラをハンドラ引数から分離することです。

fruitMixer = function(fruitHandler, fruitHandlerArgs) {
    //do stuff here

    //call the handler, passing it its args
    fruitHandler(fruitHandlerArgs);
}

fruitMixer(function() {
    //mix the fruits
}, {
    arg1: 'some val',   
    arg2: 'some other val'
});
于 2012-04-03T21:28:46.967 に答える
0

関数スコープの例

私はあなたの質問を完全には理解していないかもしれません。ただし、JavaScript では、関数のスコープに関していくつかのクールなことを行うことができます。

var fruitMixer = function () {
    var arg1 = this.arg1,
        arg2 = this.agr2;
    if (arg1 is something) {

    } else {
        arg2('something else');
    }
}

fruitMixer.call({arg1: 'some val', arg2: function (value) {
        // handle value
    }
})

thisそのため、呼び出しでコンテキストを関数に渡すことができます。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

于 2012-04-03T21:34:51.250 に答える