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

I passed a function(which itself has a parameter) as a parameter into another function and how to get the parameter

本文关键字:函数 参数 另一个 获取 何获取 参数传递 一个 有一个      更新时间:2023-09-26

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

您无法提供已发布的代码。传递给 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() .

编辑

已添加呼叫

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

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

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

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

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