何时在jQuery中使用全局变量?

时间:2013-08-12 19:26:44

标签: jquery global-variables

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

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

定义一个简单的方法,如

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

或全局变量,如

dateFormat = 'yy-mm-dd'

1 个答案:

答案 0 :(得分: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

  8. 编辑:

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

    (function( $ ){
    
        ...YOUR CODE HERE...
    
    })( jQuery );
    

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

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