如何声明和访问全局变量

时间:2014-06-06 05:12:38

标签: 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 {
        return true;
    }
}

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


//File2.js
var file1 = require("./File1.js");
var name = "josh";
var verify = file1.validName(name);
if(verify) {
cosnole.log("Valid name");
}else {
console.log("Error");
}

node File1.js
node File2.js

当我执行File2.js时,我没有为arr []定义。有人能帮助我,我在下面的代码中做了什么

3 个答案:

答案 0 :(得分:1)

Node.js模块保留您在其顶层声明的变量,直到模块为Garbage Collected或您手动删除它们。如果查看File1.js,则表示您正在导出数组对象,而不是其他任何内容。所以当你说

var file1 = require("./File1.js");

file1只是对具有arr属性的JavaScript对象的引用。您可以通过打印file1来检查这一点。您在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");
}

*要详细了解exportsmodule.exports,您可以查看my blog post关于此

答案 1 :(得分: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");
 }

答案 2 :(得分:0)

您可以简单地使用global。(name)=(value)

示例:

<强> main.js

global.foo = 1;
require('./mod.js').show();

<强> mod.js

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