大致问题如下:
在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);
——有时候自己挖的坑,在里面转悠好久,就是出不来,出来了发现,我去,就是这么简单个问题。根本问题还是基本功不够扎实。
网友评论