我将一个函数(它本身有一个参数,例如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>
答案 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
关键字及其声明之间添加注释可能会破坏此方法。)
话虽如此,我没有看到这对你有用......