javascript - 一个js闭包的问题
伊谢尔伦
伊谢尔伦 2017-04-11 10:36:51
[JavaScript讨论组]
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
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(5)
高洛峰
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)
})
伊谢尔伦

两个问题

第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函数就好啦,然后再返回data

天蓬老师

function a() {

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

}

大家讲道理

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号