2011-09-22 51 views
0

这让我疯狂了几个星期。我有一个可变数据,我想在我的程序的不同部分访问。像这样,跨范围的Javascript值丢失

var data = []; 

SomeNamespace.module.method(function(){ 
    data.push(['some data']); 
}); 

// data is undefined here 

但是,它似乎丢失了,可能与范围有关。我怎样才能解决这个问题?

在此先感谢!

+0

数据不应该是'undefined'那里,它应该要么有它的数据,或者仍然取决于一个空的阵列 - 当'SomeNamespace.module.method'实际运行你传入的函数。 – evan

+0

对不起,是的,它仍然是一个空数组。 – maximus

回答

7

该函数是一个回调函数,所以只有在回调函数运行之前数据才会被填充。

所以这个:

var data = [];  
(function(){ 
    data.push(['some data']); 
})(); 
data; // ['some data'] 

组数据,而是:

var data = []; 
var func = function() { 
    data.push('values'); 
} 
data; // [] - empty array 
+0

不,即使将它放置在匿名自执行函数中,它仍然会返回[]。 – maximus

+0

嗯,它不应该。你可以发布相关的代码,因为更深的事情正在发生。 – Joe

+0

我站好了;回调函数是不同步的,并且在我期待的时候也不分配。感谢你的回答! – maximus