我遇到这种情况:
<script>
var cb;
function doSomething(c) {
cb = c();
}
cb();
</script>
但它不起作用。我想将变量设置为函数,以便进行其他函数调用的回调。有些想法吗?
答案 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个选项可将变量设置为功能
var fn = functionname;
var fn = function(param){};
这将是一个匿名函数var fn = function FunctionName(param){};
这将是一个命名函数,在调试时派上用场,因为它会向您显示一个函数名称(console.log(c);
您可以像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。