在此代码摘录中,我试图弄清楚data
函数中的setExtension
变量是否在Object.keys上下文中可用。由于setExtension
功能旨在在data.layout
可用时更改extension
。
function setExtension(file) {
var data = files[file];
if (extension) data.layout = data.layout + '.' + extension;
}
Object.keys(files).forEach(function(file){
if (!check(file)) return;
setExtension(file);
debug('stringifying file: %s', file);
var data = files[file];
data.contents = data.contents.toString();
});
我会说setExtension
什么都不做,因为它在其范围内创建data
并且它不会返回data
。但是我无法弄清楚我是否真的是正确的,或者忽略了一些微不足道的事情。
答案 0 :(得分:1)
data
变量在其本地函数范围之外不可用,因为它是使用var
关键字声明的,而Javascript具有函数级别范围。
如果删除var
关键字,那么它将可用,因为它将在全局对象上声明。 但是,这是bad idea,所以不要这样做。
您可以做的是从setExtension
函数返回数据变量。
function setExtension(file) {
var data = files[file];
if (extension) data.layout = data.layout + '.' + extension;
return data;
}
然后,您可以通过更改forEach来获取数据变量:
Object.keys(files).forEach(function(file){
if (!check(file)) return;
var data = setExtension(file);
debug('stringifying file: %s', file);
data.contents = data.contents.toString();
});