我試圖避免在我的代碼中使用全局變量,所以我試圖通過在$(document).ready
中聲明它們並將它們作爲參數傳遞給$(document).ready
之外的函數,更新它們,然後返回從這些函數更新的值來操作$(document).ready
中的變量。
另一種解決方法是使用hidden
輸入字段來存儲變量,但我也聽說這是不好的做法。
我想知道如果我應該只使用全局變量,按照我目前正在做的方式做,還是使用隱藏的輸入字段?
下面是我試圖完成的一個簡單例子。變量驗證是我希望能夠使用和更新的變量。
$(document).ready(function(){
var validations = [];
$('#inp').keypress(function(e){
if(e.which == 13){
e.preventDefault();
scanValidation(validations, function(valid){
validations = valid;
});
}
});
}):
function scanValidation(valid, cb){
var scanval = $('#inp').val();
if(valid.includes(scanval)){
//display error
}
else{
var validarr = valid.slice();
validarr.push(scanval);
var myData=JSON.stringify({ "name":"user1", "validations":validarr});
//Makes an ajax call to see if the sent array validarr is a valid request
apiCall(myData,'scanValidation',function(decoded) {
if (decoded.Status!="ERROR") {
valid = validarr;
}
else {
//display error
}
return(cb(valid));
});
}
}
使用正確的作用域變量。範圍取決於要求。您可能希望查看javascript命名空間,因爲聽起來您的文檔中有很多(讀取:太多)代碼。 –
你能告訴我們一個例子,你正在做關於封閉之外的函數的傳遞嗎?這聽起來像是你正在試圖以正確的方式來確定變量的範圍,但只是爲了確保。 – Taplar
注意,隱藏變量並不是將數據存儲在DOM中的唯一方法。您也可以使用data- *字段將邏輯實體的相關信息存儲在DOM中。使用jquery的data()以這種方式存儲信息將允許它從任何可以訪問該元素的方法訪問,並且因爲它與元素相關聯,所以它不是真正的全局。 – Taplar