通过变量传递函数

时间:2013-04-06 21:20:42

标签: javascript jquery

我遇到这种情况:

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

cb();
</script>

但它不起作用。我想将变量设置为函数,以便进行其他函数调用的回调。有些想法吗?

3 个答案:

答案 0 :(得分:2)

c()执行该函数并返回一个值,您需要传递对它的引用:

cb = c

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

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

但如果您想要的是回调,那么您不需要全局变量:

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

当您使用另一个函数作为参数运行该函数时,将运行回调。

答案 1 :(得分:0)

您需要先为您的函数指定cb:

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

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

doSomething(myFunc);

cb();
</script>

如果您执行cb=c();,您将立即执行函数c并将值返回cb,如果您希望变量cb作为c的结果},这样做。否则,在不运行的情况下分配。

答案 2 :(得分:0)

您有3个选项可将变量设置为功能

  1. var fn = functionname;
  2. var fn = function(param){};这将是一个匿名函数
  3. var fn = function FunctionName(param){};这将是一个命名函数,在调试时派上用场,因为它会向您显示一个函数名称(console.log(c);
  4. 您可以像var returnVal = fn();一样调用它或将其传递给函数var returnVal = myFunc(fn);,其中myFunc调用该参数,将其inFn设为inFn();

    值得注意的是: 由于此类函数与全局上下文相关,因此可以将对象绑定到其更改其范围。这使您可以this引用绑定对象。 (请注意,所有浏览器都不支持绑定,因为它已定义ECMAScript 5,但有很多polyfill在那里。)

    • fn.bind(object);

    或者使用fn.call(object, param1, param2)fn.apply(object, [param1, param2])在另一个上下文中调用它。尼斯写了这个Link to odetocode.com/blog

相关问题