【问题标题】:When to use global variable in jQuery?什么时候在 jQuery 中使用全局变量?
【发布时间】:2013-08-14 05:52:00
【问题描述】:

我需要为一些日期选择器设置dateFormat

定义dateFormat 的最佳方式是什么?

定义一个简单的方法,比如

function dateFormat() {
    return 'yy-mm-dd';
} 

或全局变量,如

dateFormat = 'yy-mm-dd'

?

【问题讨论】:

  • 第一个没有优势。
  • 可能会有。例如,如果它取决于用户的地理位置、用户的选择或类似的东西。
  • 函数变体会花费你一个额外的函数调用。差异几乎无法衡量。您的问题的答案还取决于您如何设计后端代码。
  • @MarkusHofmann,感谢您的回复。如果有的话,你能帮我看看什么时候在 jquery 中使用全局变量吗?
  • @SivaKrishnaAytha 发布了我的答案。

标签: jquery global-variables


【解决方案1】:

好的,根据your comment

@MarkusHofmann,感谢您的回复。如果有的话,你能帮我看看什么时候在 jquery 中使用全局变量吗?

…我一直在寻找有关在 jQuery 中使用 全局变量 的信息。

在这里,我将总结我的发现。您可以在此答案的末尾找到来源。

我们开始:

通常您只需省略 var 即可定义全局变量(就像您在问题中所做的那样)

dateFormat = 'yy-mm-dd';

但是!!!省略 var 会生成一个隐式全局,这是一件坏事,并且会在严格模式下产生错误。

但是,如果您需要在生产代码中生成全局变量(应该避免),请始终明确声明它们:

window.dateFormat = 'yy-mm-dd';

 
您可以使用上述方法在 window / jQuery 对象的命名空间内创建 global vars

窗口对象:

window.myNameSpace = {
    dateFormat = 'yy-mm-dd',
    ...
};

jQuery 对象:

$.myNameSpace = {
    dateFormat = 'yy-mm-dd',
    ...
};

但请记住命名命名空间时要小心,因为如果有另一个相同的命名空间来自插件左右,可能会发生命名冲突。我建议将全局变量封装在一个全局命名空间中,因为这使它独立于 jQuery,并且不会弄乱它的命名空间。

将全局变量封装在一个全局命名空间中:

var MyNameSpace = {}; // The global object container
MyNameSpace.dateFormat = 'yy-mm-dd';

您也可以使用Closure 来定义全局变量或Private Member Variables

长话短说:最好的做法是避免全局变量

 

来源:

  1. https://stackoverflow.com/a/3352033/2493918
  2. https://stackoverflow.com/a/2895772/2493918
  3. How to cleanly deal with global variables?
  4. http://www.javascripttoolbox.com/bestpractices/#namespace
  5. http://jibbering.com/faq/notes/closures/
  6. http://www.crockford.com/javascript/private.html
  7. https://stackoverflow.com/search?q=namespace+javascript+global

编辑:

我想在我的回答中再添加一件事:当我为 jQuery 编写插件时,我将所有代码放在 Immediately Invoked Function Expression (IIFE) 中,然后传递函数 jQuery em>,并将参数命名为 $。此闭包允许您拥有自己的私有变量并保护 jQuery $ 别名:

(function( $ ){

    ...YOUR CODE HERE...

})( jQuery );

Ben Alman 在他的网站上有a good post,提供有关 IIFE 的更多信息。

在 StackOverflow 上还有一个与 IIFE 相关的问题值得一读:
Using 'window', 'document' and 'undefined' as arguments in anonymous function that wraps a jQuery plugin

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 2014-08-06
    • 2019-08-16
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多