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