javascript - 外部函数怎样访问内部函数变量值?
伊谢尔伦
伊谢尔伦 2017-04-10 17:24:37
[JavaScript讨论组]

外部函数怎样访问内部函数变量值?
function loadData(){

var data1 = 0;
$.each([0,1,2,3], function(k, v){
    if(v==0){
        $("body").post("ajaxUrl", {"data1":data1}, function(data){
            if (data.length ==0){
                data1 = 1;
            } else {
                console.log("error");
            }
        })
    } else {
        console.log("error");
    }
});
alert(data1); //输出为0;怎样才能让这里输出为1??

}

伊谢尔伦
伊谢尔伦

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

全部回复(5)
巴扎黑

用你这种写法,没有办法实现。

因为你的代码里面的

function(data) {
    // ...
}

这个函数是一个异步过程(AJAX请求)的回调函数,它一定是在alert(data1)之后被调用的。所以你alert出来的结果一定是0。

办法就是改变程序的结构。比如使用Promise,或者某些处理异步的类库(如async等)。

巴扎黑
$("body").post(url,data,callback);

callback是异步回调,实际上整个代码的执行顺序是

//step 1
var data1=0;
//step 2
$.each(array,func)
//step 3
alert(data1);
//step 4
callback()

callback要等post请求返回后才会执行,而这个等待时间里,step 3早就已经执行过了。

高洛峰

jq的话,把ajax的参数async设为FALSE应该是最简单的做法了

PHPz

问题在于$.post是一个异步操作,在post外面alert的时候,data1值还没有改变。
如果你要在loadData外面获取post之后的data1的值,可以试着把对data1的操作包装成回调函数传递给loaddata,然后在post里面调用回调函数

巴扎黑

你的问题并不是「外部函数怎样访问内部函数变量值?」
而应该是怎样访问异步函数返回值,答案就是使用回调函数。我看你使用了 jQuery,你可以看看关于 deferred 的内容,为了便于理解,看这篇阮一峰老师的文章好了:
http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html

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

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