返回自执行函数

时间:2013-01-07 17:42:38

标签: javascript

说我想这样做:

function z(){return function(){a = 4}
}

function b(){
 var a;
 c = z();
 c();
}

我想跳过c();但是我希望在调用者范围内返回后立即执行返回的函数,以便我可以使用它。

在此示例中,a应获取值4

有办法吗? 欢呼声

4 个答案:

答案 0 :(得分:7)

您应该可以使用

立即执行返回功能
z()();

答案 1 :(得分:3)

不,这是不可能的(不使用像eval这样的技巧)。您无法更改z返回的函数的范围。

如果没有关闭,你的例子可能会更简单,你要求的只是

function c() {
    a = 4;
}
function b() {
    var a;
    c(); // should change variable a
    return a;
}
b(); // is expected to return 4, but does not

您无法更改函数的范围,也无法传递范围对象(如指向变量的指针)。但是,您可以传递一个对象,其属性将被函数更改:

function z(obj) {
    return function() {
        obj.a = 4;
    };
}
function b() {
    var o = {};
    z(o)(); // as mike and others said, this is the same as yours
            // - you don't need the c variable
    return o.a;
}
b(); // returns 4 now

escaparello做了类似的事情,只有他确实使用了对象作为thisValue,他确实传递给了匿名函数,而不是z。我认为我更容易理解,并更好地利用z闭包。

答案 2 :(得分:1)

试试这个

function z(){
    return function(){ 
        return 4;
    }
}

function b(){
    var a;
    a = z()();
}

答案 3 :(得分:1)

看起来很奇怪,但你想做这样的事情吗?

function z(){
    return function() {
        this.a = 4;
        return this;
    }
}

function b(){
    var obj = { a : 0 };
    var c = z().apply(obj);
    console.log(c.a);
}

b();