2010-09-04 155 views
4

Man Im試圖理解回調函數。我已經結束了很多文章和帖子。解釋似乎是循環的,我認爲我實際上越來越不理解哈哈。我很明顯在javascript事件中使用過它們,但它更多地是「記住這些行」,而不是「這就是發生了什麼事,爲什麼有點理解。回調函數

所以繼承人我的理解。假設你有2個對象,函數p()和函數k()。您將函數k傳遞給p()。 p()可以訪問k的內部變量。

function p(x){ 
    alert(x.n);//5 
} 

function k(){ 
    this.n = 5; 
} 

p(k); 

令人尷尬的多久,它使我得到這一點。

+3

你的問題是什麼? – BoltClock 2010-09-04 05:17:20

+1

我認爲你可能會令人困惑的回調與關閉 – 2010-09-04 05:55:25

+1

偉大... wtf是一個封閉... fml大聲笑,srsly現在需要睡覺 – jason 2010-09-04 06:02:30

回答

4

也許一個例子會有所幫助嗎?

// First, lets declare the function we're going to call 
calledFunction = function (callback, arg) { 
    callback(arg); 
}; 
// Second, lets declare the callback function 
callbackFunction = function (arg) { 
    alert(arg); 
}; 
// Next, lets do a function call! 
calledFunction(callbackFunction, "HAI"); 

所以,calledFunction()callback說法是callbackFunction但是,如果你注意到,我們沒有調用該函數的是,我們傳遞一個變量中包含的功能,其arg功能只是要alert()。當執行calledFunction()時,它會將參數callback作爲參數的第一個參數arg作爲參數調用。

幫助過?

編輯:如果您使用function foo() {}風格的聲明,這仍然有效。 (以防萬一;我不知道你用JavaScript是否流利)

-1

你做錯了。 this.n = 5;k()未設置其「內部變量」,而x.n訪問函數對象的x屬性,而不是其內部變量。 試試這個:

function p(x) { alert(new x().n); }

變量綁定是一個重要的編程概念。

我認爲這篇文章有幫助。 http://www.hunlock.com/blogs/Functional_Javascript

+0

所以當調用x()時(它只是僞裝成x),n仍然在範圍內。這是關鍵嗎? – jason 2010-09-04 05:41:33

+0

@John是的,只是跑了,n沒有定義 – jason 2010-09-04 05:44:19

+0

和這個關鍵字是兩個函數中的窗口對象,甚至在x() – jason 2010-09-04 05:47:10