2

我将一个函数(它本身有一个参数,比如说para)作为参数传递给另一个函数函数b()以及如何获取参数para。

这是一个简单的例子

<input type="button" onclick="sometest3()" value="Run test">

<script>
function sometest3() {

    // pass an anonymous function as a parameter which has
    // its own parameter "client"
    sometest('connection',function(client){client.getInfo();}) 
}


function sometest(eve,func) {

     // get this function's parameter which is "client" and pass
     // a reference of sometest2 to it. so in the callback I can use
     client.getInfo(); 
}


function sometest2() {
   this.getInfo=function (){alert("get it");};
}
</script>
4

2 回答 2

0

你不能给出你发布的代码。传递给的匿名函数sometest作为局部变量保存,超出其范围的函数无法访问。

如果要sometest访问client,则必须传递它,以下使用局部变量:

function sometest3() {

    var client = {getInfo: function(){ /* whatever */}};

    sometest('connection', function(client){client.getInfo();}, client);
}


function sometest(eve, func, client) {

    // The client object has been passed from sometest3
    func(client);

}

或者,您可以在闭包或全局变量中使其对两个函数都可用,或者对两个函数都可访问的某个对象的属性(本质上是相同的东西)。你的选择。

例如使用闭包:

var foo = (function() {
    var client = {getInfo: function(){ /* whatever */}};
    return {
        sometest3: function() {
            foo.sometest('connection', function(obj){obj.getInfo();}, client);
        },

        sometest: function(eve, func, client) {
            // The client object has been passed from sometest3
            func(client);
        }
    };
}());

然后将其称为foo.sometest3().

编辑

添加调用

于 2012-06-04T07:26:56.030 回答
0

如果你想知道一个函数中有多少个参数被命名,func你可以检查func.length。当然,这并不意味着您不能向该函数传递更多或更少的参数,而只是其中有多少存储在局部范围变量中。

但是,如果您想知道这些变量的名称,最好的办法是将函数转换为字符串并获取其声明:

var parms = String(func)
        .match(/function[^\(]*\(([^\)]*)/)[1]
        .split(/\s*,\s*/);

(请注意,在function关键字及其声明之间添加注释可能会弄乱此方法。)

话虽如此,我看不出这对你有什么用......

于 2012-06-04T07:31:03.437 回答