返回一个自执行的函数

Returning a self executing Function

本文关键字:执行 函数 一个 返回      更新时间:2023-09-26

假设我想这样做:

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

我想跳过c();,但是我想在调用者作用域返回时立即执行返回的函数,以便我可以使用它。

在这个例子中,a应该得到值4

有办法吗?欢呼声

您应该能够使用

立即执行返回函数
z()();

不,这是不可能的(不使用像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闭包。

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

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();

试试这个

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