Javascript:带有预定义参数的返回函数
我有一个函数Javascript:带有预定义参数的返回函数,javascript,function,Javascript,Function,我有一个函数 function a (p1, p2) { /* ... */ } 在某些范围内,我们想要得到这样的东西: function b (/* no params! */) { return a (my1, my2) } var b = getB(my1, my2); 其中,my1和my2在此范围内以某种方式定义。所以我应该得到一个无参数函数b,当调用该函数时,它使用固定参数my1和my2调用a。现在的问题是,为什么这是不对的,这是:) UPD:好的,我在那些参数中有一些回调,现在
function a (p1, p2) { /* ... */ }
在某些范围内,我们想要得到这样的东西:
function b (/* no params! */) { return a (my1, my2) }
var b = getB(my1, my2);
其中,my1和my2在此范围内以某种方式定义。所以我应该得到一个无参数函数b,当调用该函数时,它使用固定参数my1和my2调用a。现在的问题是,为什么这是不对的,这是:)
UPD:好的,我在那些参数中有一些回调,现在发现了如何处理它们。我错过的是两次应用这种技术。谢谢。将值放入数组(或JSON)并返回数组
function a (p1,p2) {
var my = []
my[0] = p1
my[1] = p2
return my
}
function b () {
return a(my1,nmy2)
}
也许我没有抓住你例子中的要点,我不知道。为什么这不对?你有错误吗?我试图根据您的描述和我的作品复制一个工作样本,因此您可以发布一个更详细的样本:
<script>
function a(p1, p2)
{
return 'hello ' + p1 + ' and ' + p2;
}
function b(my1,my2)
{
return function()
{
return a(my1,my2);
}
}
var wrapper=b();
alert(wrapper());
</script>
功能a(p1、p2)
{
返回“hello”+p1+“和”+p2;
}
功能b(my1、my2)
{
返回函数()
{
返回a(my1、my2);
}
}
var-wrapper=b();
警报(包装器());
编辑
根据您对另一个答案的评论,我更新了我的示例,以展示如何包装函数
编辑2
我用变量替换了它们;-) 编写一个接受my1和my2并创建函数b的函数:
function make_b(my1, my2){
return function b(){ return a(my1, my2);};
}
function getB(my1, my2) {
return function() {
a(my1, my2);
}
}
只需创建一个返回新函数b的函数:
function make_b(my1, my2){
return function b(){ return a(my1, my2);};
}
function getB(my1, my2) {
return function() {
a(my1, my2);
}
}
然后像这样使用它:
function b (/* no params! */) { return a (my1, my2) }
var b = getB(my1, my2);
我不确定我是否理解正确,但你可以看看一个叫做。可以在Javascript中使用一个函数,这样您就可以获得另一个具有部分或全部预设参数的函数 您可以查看一个实现 如果您使用的是Prototype,那么可以通过这种方式获得函数b
var b = a.curry(arg1, arg2);
现在调用
b()
与调用a(arg1,arg2)
似乎有三个部分:
定义一个:
function a(M, N) {
return M + N;
}
定义b:
var X = 10;
var Y = 25;
var b = function() {
return a(X, Y);
}
使用b:
var thirtyFive = b(); // thirtyFive = 35
本例使用onclick事件处理程序的赋值 在页面加载期间演示如何创建函数 包含对本地的嵌入引用的引用 设置函数中的值
<html>
<head>
<title>Scope passing Test</title>
<script type="text/javascript">
// Your target function
function a(p1,p2) { alert("p1="+p1+ " p2="+p2); }
function yourSetupFunction()
{
// Declare some local variables that your "a()" function cannot see to test.
var my1 ="Look Ma" ;
var my2 ="No hands" ;
// Snag a reference to the <a id="testA"></a> element
var oAelement=document.getElementById("testA");
oAelement.addEventListener( "click" ,
(function(scopePass_My1,scopePass_My2)
{
return function()
{
a(scopePass_My1,scopePass_My2)
}
})(my1,my2) ,true);
}
</script>
</head>
<body onload="yourSetupFunction()">
<a id="testA" href="#" onclick="return false;">Click to Test</a>
</body>
</html>
第一组参数将内容计算为函数引用
第二组参数。。。(my1,my2)。。。导致调用函数引用
它返回另一个函数引用,可以查看传入的参数
... scopePass\u My1,scopePass\u My2。。。并且能够将这些传递给目标函数a(p1,p2)
希望这能有所帮助。在我看来,你错了(或者我不够严格)。我想要的是-有一个函数1,它接受一些参数,生成一个函数2,它不接受任何参数,并返回带有一些固定参数的函数1,而不是常数,当然,它们必须在那个时刻进行计算。问题是-my1和my2不是常数,如您的示例“josh”和“fred”。必须在创建b时评估。e、 g.
var v='some text';函数b(){返回a(v);}