函数返回函数var

时间:2014-01-04 00:12:49

标签: javascript

我可以使用这样的函数返回一个var,它本身就是一个对DOM元素执行操作的函数吗?

var foo = function() {

    var blah = function() {
        document.getElementById('box').style.color="red";
    };

    return blah;

};

setTimeout(function() {

    foo();

}, 2000);



<div id="box">This is some div</div>

修改

感谢所有的提示,它确实可以正常工作。 一点点跟进...... 我可以和返回的对象做类似的事吗?

var foo = function() {

    var blah = function() {
        document.getElementById('box').style.color="red";
    };

    var flop = function() {
        document.getElementById('box').style.color="green";
    };

    return {
        blah: blah,
        flop: flop
    };

};


var newInstance = foo();

setTimeout(function() {

    newInstance.blah;

}, 2000);

setTimeout(function() {

    newInstance.flop;

}, 4000);



<div id="box">This is some div</div>

4 个答案:

答案 0 :(得分:3)

是的,你可以这样做。你的例子很接近。你想要做的是:

setTimeout(function() {

    var result = foo();
    result();

}, 2000);

或更简洁:

setTimeout(function() {

    foo()();

}, 2000);

内部foo()调用返回函数,现在需要通过将另一对parens粘贴到该结果上来调用该函数。

更新

此外,由于setTimeout()期望函数作为第一个参数,你可以这样做:

setTimeout(foo(), 2000);

这样你就可以调用foo()来返回函数,并将该函数直接传递给setTimeout()。你的大脑晕了吗? =)

答案 1 :(得分:2)

是的,但你需要这样称呼它:

foo()();

第一组括号获取函数表达式,第二组执行函数表达式。

因为foo返回一个函数,我认为代码可以写成:

setTimeout(foo(), 2000);

答案 2 :(得分:1)

取走匿名函数包装器:

setTimeout(foo(), 2000);

当你调用“foo”时,它将传递给setTimeout函数。您不需要将其包装在另一个匿名函数中。

答案 3 :(得分:0)

JavaScript中的函数是一等公民,所以答案是肯定的:foo()()