JavaScript函数指针问题

时间:2011-01-20 08:47:20

标签: javascript jquery

刚开始使用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”。

5 个答案:

答案 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]);