美文网首页
js function传递的参数和全局变量名相同,functio

js function传递的参数和全局变量名相同,functio

作者: 钟俞0荑花羡 | 来源:发表于2019-12-19 09:24 被阅读0次

    大致问题如下:

    在js中,定义了全局变量,并且在某个function中,也传递了当前的变量名,然后在 function内部,给全局变量赋值,无法成功。

    大致问题代码如下:

    <script type="text/javascript" src="../../js/jquery.min.js"></script>

    <script>

    var limit = 20;

    var offset =0;

    $(function() {

        limit = 20;

    offset =offset+limit ;

    }

    getPortShipsData(regionid, limit, offset);

    function getPortShipsData(regionid, limit, offset) {

        success(data){

            var tempoffset=offset+limit;

            offset= tempoffset;

            console.log(offset);

        }

    }

    </script>

    本次打印的结果是40,

    下次调用这个方法,打印的结果还是40;外部的offset值并没有变化。

    下次再次访问。

    原因:

    全局变量和 function里的变量名称相同,offset(外)为全局变量,offset(内)是局部变量,当在方法体内,对offset进行赋值的时候,因为重名,赋值动作会优先赋值给局部变量,所以function里面的赋值动作,结果是,  offset(内)= tempoffset;  offset(外)依然是最开始初始化时候的赋值。

    在function结束后,offset(内)就已经结束了它的生命周期,再次调用,getPortShipsData(regionid, limit, offset);  这时的offset依然是全局变量里的20。

    解决方法

    1.改变全局变量名称,或者内部变量名称。不重复的情况下,就可以对全局变量进行赋值。

    2.如果不允许改变变量名称,可以采用,window.offset=tempoffset,此时就是给全局变量命名。

    3.还有一个蹩脚的处理办法,自己定义一个赋值的function。

    function setoffset(data){

        offset=data;

    }

    在 getPortShipsData(regionid, limit, offset); 方法体的success里面直接调用,setoffset(tempoffset);

                        ——有时候自己挖的坑,在里面转悠好久,就是出不来,出来了发现,我去,就是这么简单个问题。根本问题还是基本功不够扎实。

    相关文章

      网友评论

          本文标题:js function传递的参数和全局变量名相同,functio

          本文链接:https://www.haomeiwen.com/subject/jvnnectx.html