此功能是否会成功使其数据在其他环境中可用?

时间:2015-04-12 16:27:49

标签: javascript node.js

在此代码摘录中,我试图弄清楚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。但是我无法弄清楚我是否真的是正确的,或者忽略了一些微不足道的事情。

1 个答案:

答案 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();
});