Javascript 如何声明和访问全局变量

Javascript 如何声明和访问全局变量,javascript,node.js,global-variables,Javascript,Node.js,Global Variables,在下面的代码中,我做错了什么 //File1.js var arr = []; function insertName { var name = "josh"; arr.push(name); return name; }; function validName(key) { var index = arr.indexOf(key); if (index == -1) { return false; } else { ret

在下面的代码中,我做错了什么

//File1.js
var arr = [];
function insertName {
    var name = "josh";
    arr.push(name);
    return name;
};
function validName(key) {
var index = arr.indexOf(key);
    if (index == -1) {
        return false;
    } else {
        return true;
    }
}

var result = insertname();
exports.arr = arr;
exports.validName = validName;


当Im执行File2.js时,Im未定义arr[]。有人能帮我在下面的代码中做什么吗?Node.js模块保留您在其顶层声明的变量,直到模块被垃圾回收或您手动删除它们。如果查看
File1.js
,则导出的是数组对象,而不是其他对象。所以当你说

var file1 = require("./File1.js");
file1
只是对具有
arr
属性的JavaScript对象的引用。您可以通过打印
文件1
来检查这一点。在
File1
中创建的函数永远不会导出。所以,你可以这样修理它*

exports = module.exports = {
    validName: validName,
    insertName: insertName
}
现在,您正在导出函数,它们仍然可以访问
arr
变量。从
File2
,您可以像这样调用
insertName

file1.insertName();
if (file1.validName("josh")) {
    console.log("Valid name");
} else {
    console.log("Error");
}
*要了解有关
导出
模块导出
的更多信息,您可以检查此

您只需使用全局。(名称)=(值)

例如:

main.js

global.foo = 1;
require('./mod.js').show();
module.exports = {
    show : function(){
        console.log(global.foo); // which prints "1"
    }
}
mod.js

global.foo = 1;
require('./mod.js').show();
module.exports = {
    show : function(){
        console.log(global.foo); // which prints "1"
    }
}

您的代码包含错误,请按以下方式更改代码

File1.js

  var arr = [];

  function insertName() {
        var name = "josh";
        arr.push(name);
        return name;
  };

  function validName(key) {
      var index = arr.indexOf(key);
      if (index == -1) {
      return false;
    } else {
        return true;
   }
 }

 var result = insertName();
 exports.validName = validName;
File2.js

  var file1 = require("./File1.js");
  var name = "josh";
  var verify = file1.validName(name);

 if(verify) {
    console.log("Valid name");
 } else {
      console.log("Error");
 }

在浏览器中,顶级作用域是全局作用域。这意味着,在浏览器中,如果您在全局范围变量中,则会定义一个全局变量。在节点中,这是不同的。顶层范围不是全局范围;节点模块内的某个变量将是该模块的本地变量。-
validName
不会神奇地作为属性进入
file1
;你必须导出它。这是所有的代码还是有更多的代码没有发布?我将您的代码复制到文件中(修复了几个语法错误),然后在nodejs命令提示符下运行,它在file中运行。谢谢。如果我使用node运行,它工作正常。但如果我使用集群模块运行相同的代码,它就不工作了。