刚开始使用JavaScript和jQuery,我遇到了这个问题:
foo(validation);
function foo(func) {
var time = new Date().getTime();
// do some other stuff
func("foobar" + time);
}
function validation(elementName) {
// do stuff
}
但是当我用验证函数指针调用函数foo时,我还希望在那时传入字符串“foobar”。
答案 0 :(得分:4)
怎么样:
function foo(str, func) {
var time = new Date().getTime();
// do some other stuff
func(str + time);
}
function validation(elementName) {
// do stuff
}
foo("foobar", validation);
答案 1 :(得分:3)
您可以调用另一个(匿名)函数:
foo(function() {
validation('foobar');
});
顺便说一句,ECMAscript中没有真正的“指针”,这是一个参考文献。我猜你出于教育原因这样做(将funarg = functional argument
传递给高阶函数),但你可以简化整个过程:
validation('foobar' + (+new Date()));
答案 2 :(得分:1)
啊,我明白了...你不应该使用这个可能有人说但是试试:
eval("func(\"foobar"+time+"\")");
答案 3 :(得分:1)
由于JavaScript非常灵活,因此这是使用currying的另一种方式。
function createFoo(string) {
return function(aFunction) {
var time = new Date().getTime();
// ..
aFunction(string + time);
};
}
var foobar = createFoo("foobar");
foobar(validation);
答案 4 :(得分:1)
如果你作为foo参数发送函数名和该函数的参数数组怎么样?
function foo(func,funcArgs){
func.apply({},[new Date().getTime()].concat(funcArgs));
}
function validate(arguments){
}
//then you could pass anything to the validate "pointer"
foo(validate,[argument1,argument2,/*...*/argumentn]);