2011-01-20 94 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]);