-1

我有这种情况:

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

cb();
</script>

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

4

3 回答 3

2

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

cb = c

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

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

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

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

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

于 2013-04-06T21:21:33.603 回答
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,请这样做。否则,分配而不运行它。

于 2013-04-06T21:28:58.353 回答
0

您有 3 个选项可以将变量设置为函数

  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 调用参数的函数,让它inFninFn();

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

  • fn.bind(object);

或者在另一个上下文中使用 or 调用fn.call(object, param1, param2)fn.apply(object, [param1, param2])。很好地写在这个指向 odetocode.com/blog 的链接上

于 2013-04-06T21:32:50.440 回答