【发布时间】:2017-08-02 15:28:10
【问题描述】:
我试图避免在我的代码中使用全局变量,所以我试图通过在$(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 命名空间,因为听起来您的文档中有很多(阅读:太多)代码。
-
您能否向我们展示一个示例,说明您在传递给闭包之外的函数时所做的事情?听起来您正在尝试缩小变量范围的正确方法,但只是为了确保。
-
旁注,隐藏变量不是在 DOM 中存储数据的唯一方式。您还可以使用 data-* 字段在 DOM 中存储逻辑实体的相关信息。使用 jquery 的 data() 以这种方式存储信息将允许从任何可以访问该元素的方法访问它,并且由于它与元素相关联,因此它不是真正的全局。
-
如果所有内容都在一个文件中,则可以将其全部包装在 IIFE 中,并且所有变量都不是全局变量,但如果在顶级范围内声明,则在该 IIFE 中的任何地方都可用。声明一个全局对象并分配属性而不是单个变量是另一种选择
标签: javascript jquery global-variables