在javascript中定义全局函数有什么缺点吗?
与定义全局变量一样,定义全局函数是否有任何特定的缺点?在javascript中定义全局函数有什么缺点吗?,javascript,Javascript,与定义全局变量一样,定义全局函数是否有任何特定的缺点? 我们正在尝试缩小自定义JS文件的大小,并且有相当多的代码正在跨功能使用。命名空间冲突是一个大问题。如果您创建了一个全局函数,并且意外地使用了与另一个全局函数相同的名称,则会覆盖该函数,这可能会导致应用程序中断 请记住,所有全局变量实际上都是窗口对象的属性。如果您意外地覆盖了窗口的内置属性,可能会产生一些非常奇怪的故障,很难找到 另一个原因是一般的清洁/组织。如果您编写了十几个函数来对字符串执行操作,那么您可能希望将它们全部放在一个对象str
我们正在尝试缩小自定义JS文件的大小,并且有相当多的代码正在跨功能使用。命名空间冲突是一个大问题。如果您创建了一个全局函数,并且意外地使用了与另一个全局函数相同的名称,则会覆盖该函数,这可能会导致应用程序中断 请记住,所有全局变量实际上都是
窗口
对象的属性。如果您意外地覆盖了窗口的内置属性
,可能会产生一些非常奇怪的故障,很难找到
另一个原因是一般的清洁/组织。如果您编写了十几个函数来对字符串执行操作,那么您可能希望将它们全部放在一个对象
stringOps
,以便将它们放在一个位置 全局引用的主要危险是你会踩到别人的引用,反之亦然。这会使测试变得极其困难,因为您可能引入了大量的非确定性。
例如,假设您将Global.PI定义为3.14159,并且您的函数引用该函数,直到用户加载一个包含将Global.PI定义为“Lemon”的库的页面时,您的函数才会正常工作
由于我们应用程序的结构,我从事的项目具有全局参考。
为了缓解其中的一些问题,我们将向window(window.yourObjHere)附加一个对象,并将全局引用放置在该对象中
Globals的唯一优势是,没有他们,有些事情根本无法完成。我们有一个eventBus,它必须通过单独的AngularJS应用程序发送消息。由于AngularJS native eventBus是针对每个应用程序的,因此我们必须在全局对象上注册每个应用程序,以便跟踪消息应该到达的位置等。如果可能,请避免使用全局事件,但有些事情没有全局事件是办不到的。请小心并限制您的全局足迹。缺点如前所述(基本上没有名称空间,这意味着函数/变量可以被覆盖),但您可以通过声明一个包含所有所需内容的全局对象来解决此问题,并且您可以“动态”向其添加内容:
GLOBAL_myObject = {
variableOne: 1,
variableTwo: "A atring",
getThisAndThat: function(p1,p2) {
//do some stuff
return p1 * p2; /or somthing
}
};
因此,将您自己的所有变量作为该对象的属性:
alert(GLOBAL_myObject.variableOne);
GLOBAL_myObject.getThisAndThat(1,2);
实际上,您只是在给变量命名
要向全局对象添加更多内容,只需声明它
全局对象。另一个对象=1965;//多好的一年啊 相关:想象一下每个人都会这么做,比如当你开始包括一些第三方js插件时,命名冲突等的可能性有多大?如果你只需要几个函数,那么你就不需要在意了。全局函数是全局变量(它们只是碰巧有函数对象作为它们的值)。缺点与其他变量相同。