在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是相同的语言,不同的编程技术在前端和后端使用。