在nodejs和web浏览器中运行的javascript,关于variables的作用域
在浏览器中,不同的JavaScript文件共享一个范围:
a.js:
var a = 1; //我们添加“var”,所以我们不打算把它作为一个全局variables。
b.js:
console.log(a)// a = 1,但是b.js也可以看到这个var!
在nodejs中:
a.js ….
b.js ….
console.log(a)// b.js看不到var,用“var”keywork声明
有没有文件说这些区别?
nodejs封装每个文件的作用域,有点像ruby。 如果你想分享variables你应该export
它们:
file1.js:
exports.a = 5;
file2.js:
exports.b = 6;
main.js:
var file1 = require('./file1.js'); var file2 = require('./file2.js'); console.log(file1.a); // 5 console.log(file2.b); // 6
通过分配给export.variablename = yourObject;
将从其他地方包含文件时可以访问: var exportedStuff = require('./file.js')
yourObject
var exportedStuff = require('./file.js')
将允许您通过yourObject
访问yourObject
。
所有这一切的原因是迫使你更关心你如何编写代码。 与仅仅把全局variables放在任何地方相反,它迫使你将代码组织到模块中,并且使你能够以比networking上更容易的方式模拟私有范围。
在networking中,当你省略var
,只需要varname = 5
那么当variables不存在的时候,就和说window.varname
。 这在nodejs中不是这种情况。 在Node中,如果您要使用全局,则必须执行global.varname = 5
那是对的。 所有的文件都加载在浏览器中,但在node.js中使用每个文件的模块,所以基本上要结合你需要做的b.js的文件
var a=require('a.js');
那么你的variables将在aa中
为了这个工作,你需要在a.js中输出.a exports.a=1
一定要记住,虽然JavaScript是相同的语言,不同的编程技术在前端和后端使用。