2

外部的JavaScript访问参数试想一下下面的代码:给定函数的

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 
    }); 

我想要做的是得到了给定匿名函数之外的参数。有了这些参数,您就可以完成上述任务。

我知道这段代码不会工作,因为参数不能在函数本身之外访问。但我想知道是否有另一种方法或解决方法来做到这一点?

+0

似乎是一个有效的模式问题给我。 – 2012-04-03 21:29:06

+0

但是...如果你给了匿名函数参数,那么你就是在调用它。它应该已经运行并返回......无论......在调用“fruitMixer”时。你的例子是非法的语法。 – Zecc 2012-04-03 21:36:51

+0

我知道语法是illigal,我只是想知道如果访问这些参数是可能的(我想它不会),但我喜欢看到一些创造性的解决方案,试图做同样的事情 – sebas2day 2012-04-03 21:52:53

回答

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' 
}); 
0

Example of function scope

我可能没有完全理解你的问题。然而,在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

相关问题