Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中定义全局函数有什么缺点吗?_Javascript - Fatal编程技术网

在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插件时,命名冲突等的可能性有多大?如果你只需要几个函数,那么你就不需要在意了。全局函数是全局变量(它们只是碰巧有函数对象作为它们的值)。缺点与其他变量相同。