Javascript Meteor模块化和访问保护-一切都是“全球”的吗?

Javascript Meteor模块化和访问保护-一切都是“全球”的吗?,javascript,python,oop,meteor,modularity,Javascript,Python,Oop,Meteor,Modularity,我正在探索Meteor,我试图了解它是如何工作的,模块化方面的,与我更熟悉的其他OOP系统(如Python)相比 在我看来,将事物分解成单独的文件——HTML模板、相应的JS文件——是相当随意的,只与程序员心目中的组织相对应。还有别的吗 据我所知,所有javascript、所有HTML、所有CSS、所有模板都连接在一起 对于Python模块和OOP类,有什么保护意义吗?我知道,在Meteor JS文件中声明变量时是否使用“var”决定了它是否具有全局访问权限——如果所有Javascript文件都

我正在探索Meteor,我试图了解它是如何工作的,模块化方面的,与我更熟悉的其他OOP系统(如Python)相比

在我看来,将事物分解成单独的文件——HTML模板、相应的JS文件——是相当随意的,只与程序员心目中的组织相对应。还有别的吗

据我所知,所有javascript、所有HTML、所有CSS、所有模板都连接在一起

对于Python模块和OOP类,有什么保护意义吗?我知道,在Meteor JS文件中声明变量时是否使用“var”决定了它是否具有全局访问权限——如果所有Javascript文件都连接在一起(如果它们实际上连接在一起),如何使用它来“模块化”应用程序


请原谅我的ulta新手问题-如果您对如何从树中看到森林有任何见解,我们将不胜感激。

的确,这些文件被合并成一个发送给客户端的大文件,但每个文件中的代码都被放入一个直接调用的函数中:

您的file1.js:

这是文件1。 您的file2.js:

alert("This is file 2.")
发送到客户端的内容:

(function(){
    alert("This is file 1.")
})()

(function(){
    alert("This is file 2.")
})()

因此文件中的局部变量不会相互影响,因为它们是函数的局部变量。

加上Peppe的答案,同样的事情也会发生在服务器上

如果要将某个对象声明为全局变量,请在声明变量时忽略变量:

some_global_thing = {}
如果代码在服务器对象上,这会将其添加到窗口或全局,从而使其全局可用

同样的事情也适用于函数。想想这个:

function my_fn() {}
将作为以下文件发送:

(function(){
    alert("This is file 2.")
})()
因此,要使其在全球范围内可用,您必须将其声明为:

my_fn = function() {}

谢谢我读过了。如何利用这一事实来模块化代码?我想很明显的一点是,每个文件都存在于它自己的空间中,不会污染全局空间。除了通过全球互动的事物之外,它们是如何相互作用的?我可能缺少树的林,但来自oop背景,其中a导入b并可以访问一些公共方法。我有点困惑。@Cerulean,只有两个名称空间:文件名空间use var和全局名称空间omit var。第三个选项是创建包。包中的名称空间的工作方式相同,但是您可以决定哪些全局变量对于使用包的应用程序是可见的。