我想使用另一个函数中的变量(数组)。我已经在全局范围内定义了它,但是它不起作用。
这是我的代码,用于更好地理解:
var globalData = '';
var data = '';
$.getJSON('https://...' + data[x].id + '.json', function(data) {
globalData = data;
data = globalData.name;
console.log(data); // works just fine
if (condition === 1) {
function2(); // calls this function
} else {
function3();
}
});
function function2() {
console.log(data); // just an empty line
console.log(globalData); // UPDATE: works just fine
}
答案 0 :(得分:4)
问题在于变量data
在回调函数中被遮盖了。
function(data) {
globalData = data;
data = globalData.name;
console.log(data); // works just fine
...
因此function(data)
建立了一个作用于函数的局部变量。然后发生了奇怪的分配和重新分配的事情。您想相信自己正在操纵data
的全局版本,但是仅在处理作用域版本。
因此,变量data
必须传递给函数。
如果您想使用全局变量(不建议使用),您要做的就是将函数声明从(data)
更改为其他标识符。
答案 1 :(得分:0)
问题是您有两个名称为data
的变量,一个是本地变量,而另一个是全局变量。因此,当以下行
data = globalData.name;
不更改全局变量,而只是更改局部变量。
一种解决方案是为全局变量使用不同的名称。
var globalData = '';
var data2 = '';
$.getJSON('https://...' + data[x].id + '.json', function(data) {
globalData = data;
data2 = globalData.name;
console.log(data2); // works just fine
if (condition === 1) {
function2(); // calls this function
} else {
function3();
}
});
function function2() {
console.log(data2); // just an empty line
}
答案 2 :(得分:0)
您将相同的变量名用于两种不同的事物。您在全局范围内有一个名为data
的变量,并且getJSON
回调函数参数也有一个名为data
的参数,它隐藏了data
全局变量。另外,在该回调中,您正在修改data
变量。如果您打算修改作为参数传递的data
,那么这不是一个好习惯。