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运行,它工作正常。但如果我使用集群模块运行相同的代码,它就不工作了。