求助:javascript里求如何调用局部变量

1、javascript里求如何调用局部变量;
alert放在函数里可以显示,但是放在外面显示是undefined。
2、代码如下:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body, html,#allmap {width: 90%;height: 90%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    </style>
    <script src="http://search.dangdang.com/Standard/Search/Extend/hosts/js/jquery.js"></script>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=nCRvMdrWkhF3kg0RsTdUvku6"></script>
    <title>出行</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
    var map = new BMap.Map("allmap");
    map.centerAndZoom(new BMap.Point(118.799154,32.066449), 12);
    map.enableScrollWheelZoom();
    var ttime;
    var tdistance;
    var s;
    var p1 = new BMap.Point(118.790662,32.057327);
    var p2 = new BMap.Point(118.812128,32.046538);
    var searchComplete = function (results){
        if (transits.getStatus() != BMAP_STATUS_SUCCESS){
            return ;
        }
        var plan = results.getPlan(0);
        this.ttime = plan.getDuration(true);  //获取时间
        tdistance = plan.getDistance(true);  //获取距离


    };
    var transits = new BMap.TransitRoute(map, {renderOptions: {map: map},
        onSearchComplete: searchComplete});
    transits.search(p1, p2);
    alert(ttime)
</script>
</html>
阅读 4k
8 个回答

这个searchComplete是个回调,请求完成了就对ttime赋值了,你放在外面,请求都没完成,没触发到回调,ttime自然就是undefined

既然是局部变量,自然生命周期就是局部,如果要全局调用,就申明一个全局变量,然后在函数内部赋值。

setTimeout(() => {  
        alert(ttime)
    }, 1000);

写在里面不行么?为什么非要写在外面呢?
看看你这个需求是不是必须的?

你考虑考虑是不是有异步操作啊

debugger; 搞一下,看一下具体是怎样的执行流程,自然也就明白其中道理了.

闭包就是很好的解决调用函数体内的局部变量的很好的方案。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题