大致問題如下:
在js中,定義了全局變量哎壳,并且在某個function中毅待,也傳遞了當(dāng)前的變量名,然后在 function內(nèi)部归榕,給全局變量賦值尸红,無法成功。
大致問題代碼如下:
<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>
本次打印的結(jié)果是40,
下次調(diào)用這個方法驶乾,打印的結(jié)果還是40邑飒;外部的offset值并沒有變化。
下次再次訪問级乐。
原因:
全局變量和 function里的變量名稱相同疙咸,offset(外)為全局變量,offset(內(nèi))是局部變量风科,當(dāng)在方法體內(nèi)撒轮,對offset進行賦值的時候,因為重名贼穆,賦值動作會優(yōu)先賦值給局部變量题山,所以function里面的賦值動作,結(jié)果是故痊,??offset(內(nèi))= tempoffset;? offset(外)依然是最開始初始化時候的賦值顶瞳。
在function結(jié)束后,offset(內(nèi))就已經(jīng)結(jié)束了它的生命周期愕秫,再次調(diào)用慨菱,getPortShipsData(regionid, limit, offset);? 這時的offset依然是全局變量里的20。
解決方法
1.改變?nèi)肿兞棵Q戴甩,或者內(nèi)部變量名稱符喝。不重復(fù)的情況下,就可以對全局變量進行賦值甜孤。
2.如果不允許改變變量名稱躏敢,可以采用者祖,window.offset=tempoffset鸥拧,此時就是給全局變量命名额湘。
3.還有一個蹩腳的處理辦法,自己定義一個賦值的function把夸。
function setoffset(data){
? ? offset=data;
}
在?getPortShipsData(regionid, limit, offset); 方法體的success里面直接調(diào)用而线,setoffset(tempoffset);
? ????????????????? ——有時候自己挖的坑,在里面轉(zhuǎn)悠好久扎即,就是出不來,出來了發(fā)現(xiàn)况凉,我去谚鄙,就是這么簡單個問題。根本問題還是基本功不夠扎實刁绒。