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

时间:2012-06-04 07:15:52

标签: javascript

我将一个函数(它本身有一个参数,例如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>

2 个答案:

答案 0 :(得分: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);

}

或者你可以使它可用于闭包或全局变量中的两个函数,或者可以访问两个函数的某个对象的属性(基本上是同样的东西)。你的选择。

e.g。使用闭包:

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()

修改

添加了电话

答案 1 :(得分:0)

如果您想知道在函数func中命名了多少个参数,可以检查func.length。当然,这并不意味着您不能将更多或更少的参数传递给该函数,而只会将其中有多少存储在本地范围的变量中。

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

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

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

话虽如此,我没有看到这对你有用......