2010-09-04 142 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