2011-01-20 91 views
1

刚刚开始使用JavaScript和jQuery的,我有这样的问题:JavaScript函数指针问题

foo(validation); 

function foo(func) { 
    var time = new Date().getTime(); 
    // do some other stuff 
    func("foobar" + time); 
} 

function validation(elementName) { 
    // do stuff 
} 

但是当我调用函数foo与验证函数指针,我也想在字符串中传递“ foob​​ar“。

回答

3

您可以直接调用另一个(化名)功能:

foo(function() { 
    validation('foobar'); 
}); 

顺便说一句,有ECMAScript中没有真正的“指针”,这是一个参考寿。我猜你这样做是为了教育的原因(传递funarg = functional argument)成高阶函数这种方式,但可以简化整个事情到:

validation('foobar' + (+new Date())); 
+0

我想你应该展示如何将'时间'传递给验证方法。 – 2011-01-20 09:00:30

1

啊,我看到了你不该“T使用可以见得,但尝试:

eval("func(\"foobar"+time+"\")"); 
+0

使用`eval()`它被认为是非常糟糕的做法,它创建一个有点慢的新范围(上下文),再加上在运行时评估代码总是存在安全风险。 – jAndy 2011-01-20 08:53:00

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

由于JavaScript的是灵活的,这是一个使用钻营的另一种方式。

function createFoo(string) { 
    return function(aFunction) { 
     var time = new Date().getTime(); 
     // .. 
     aFunction(string + time); 
    }; 
} 

var foobar = createFoo("foobar"); 
foobar(validation); 
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]);