首页 > 一个js闭包的问题

一个js闭包的问题

function a() {
    var data;
    b();b();//多次执行
    var b = function () {
        if (flag == true) {
            /*......很多执行后*/
            data = 3333333333333;
        }
    };
    return data;
}

我要在另一个方法中调用方法a,以获取返回值data,请问怎么写。
data=333333333333是很多操作后的结果,显然
调用var a = a();return a//undefined

两个问题

第1个,在 a() {} 中,先执行 b 再给 b 赋值,会抛 TypeError: b is not a function

第2个,var a = a() 已经把 a 重写了,第一次执行是没有什么问题,如果还有其它地方执行 a() 就会出问题了。

然后看你的逻辑,如果你的 b() 不是异步执行的,而且保证 flag 至少有一次为 true,那 a() 的返回就不可能是 undefined。如果你确实得到了 undefined,可以检查一下是不是 flag 没有为 true 的时候,或者 b() 里面有异步代码(比如 ajax)。如果是因为 b() 里面有异步代码,那就要考虑用 Promise 或者类似的库来实现

总之,我觉得这段代码是你为了问问题临时精简出来的,不能发现原来真实的问题是哪里引起的。


你把a中b的执行放在b的赋值之后,再确保flag == true为真就可以了。


function a() {
    return new Promise(function (resolve, reject) {
        var data
        var b = function () {
            data = 3333333333333
            setTimeout(() => { resolve(data) }, 1000 * 3)
        }
        b()
    })
}

a().then(function (data) {
    console.log(data)
})

function a() {

var data;
var b = function () {
    if (flag) {
        /*......很多执行后*/
        data = 3333333333333;
    }
    return data;
};
return b();

}


在a函数里面执行一下b函数就好啦,然后再返回data

【热门文章】
【热门文章】