2010-01-06 195 views
1

我不確定這個的正確術語。但我想寫一個接受另一個函數並執行它的函數。 例如。Javascript回調函數執行

function test(data, aFunc) { 
    var newData = data + " Shawn"; 

    aFunc.call(newData); 
} 

test("hello", function(data){ 
    alert(data); 
}); 

數據應該包含「hello Shawn」字符串。請幫我改寫這個正確的方式。

+1

您正在尋找的術語是「高階函數」 – Breton 2010-01-06 20:35:33

回答

5

call方法的第一個參數是用來設置this關鍵字(函數上下文)明確,調用的函數內部,如:

function test(data, aFunc) { 
    var newData = data + " Shawn"; 

    aFunc.call(newData); 
} 

test("hello", function() { 
    alert(this); // hello Shawn 
}); 

如果要調用一個函數,而不我們在乎的上下文(this關鍵字),您可以直接調用它,而不call

function test(data, aFunc) { 
    var newData = data + " Shawn"; 

    aFunc(newData); // or aFunc.call(null, newData); 
} 

test("hello", function (data) { 
    alert(data); 
}); 

請注意,如果你簡單地調用像aFunc(newData);功能或使用callapply方法與this參數設置爲nullundefined,則this關鍵字裏面調用函數將引用全局對象(window)。

2

看起來不錯,但你可以改變

aFunc.call(newData); 

aFunc(newData); 
1

你接近。 「調用」的第一個參數是「範圍」參數。在這種情況下,它並不重要,因爲你沒有在匿名函數中的任何地方使用「this」,所以任何值都足夠了。

function test(data, aFunc) { 
    var newData = data + " Shawn"; 

    aFunc.call(this, newData); 
} 

test("hello", function(data){ 
    alert(data); 
});