2013-04-06 58 views
-1

我有这样的情况:传递函数

<script> 
var cb; 
function doSomething(c) { 
    cb = c(); 
} 

cb(); 
</script> 

但它不工作。我想设置一个变量作为函数,使其他函数调用回调。有些想法?

+0

c.call是你在找什么 – 2013-04-06 21:21:48

回答

2

c()执行的功能,并返回一个值,你需要一个参考给它:

cb = c 

此外,你应该调用函数doSomething(func)进行分配。

doSomething(function(){ alert('hello'); }); 
cb(); // "Hello" 

但是,如果你想要的是一个回调那么你并不需要一个全局变量:当你与其他功能参数的回调将运行运行功能

function doSomething(callback) { 
    // do something 
    if (callback) callback(); 
} 

+0

另外,你应该调用函数doSomething – 2013-04-06 21:21:55

+0

谢谢!然而:“但是,如果你想要的是一个回调,那么你不需要一个全局变量”,是的,我需要'因为我需要从其他函数回忆该函数,我不能通过它作为arg – Grork 2013-04-06 21:38:01

0

您需要分配CB先用你的函数:

<script> 
var cb; 
function doSomething(c) { 
    cb = c; 
} 

var myFunc = function(){ 
    window.alert("test"); 
} 

doSomething(myFunc); 

cb(); 
</script> 

如果你这样做cb=c();将执行功能c瞬间,如果你想变cbc结果值返回给cb,这样做。否则,分配而不运行它。

0

你有3只选择一个变量设置为functiion

  1. var fn = functionname;
  2. var fn = function(param){};这将是一个匿名函数
  3. var fn = function FunctionName(param){};这将是一个名为功能就派上用场了调试时,因为它会为您提供一个函数名称(console.log(c);

您不能称之为var returnVal = fn();或将其传递给函数var returnVal = myFunc(fn);其中myFunc的调用帕拉姆,让它成为inFn它像inFn();

什么可能是值得注意的:因为这样的功能是关系到全球范围内 ,可以绑定一个对象它改变了它的范围。这给了你引用绑定对象的可能性this。 (请注意,绑定是不是所有的浏览器,因为它被定义ECMAScript 5支持,但也有相当一些polyfills在那里。)

  • fn.bind(object);

或用fn.call(object, param1, param2)fn.apply(object, [param1, param2])调用它在另一种情况下。尼斯写在这Link to odetocode.com/blog