-1

我需要dateFormat为几个日期选择器设置。

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

定义一个简单的方法,如

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

或全局变量,如

dateFormat = 'yy-mm-dd'

?

4

1 回答 1

1

好的,根据您的评论

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

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

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

开始了:

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

dateFormat = 'yy-mm-dd';

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

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

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

 
您可以使用上述方法在 window / jQuery 对象的命名空间内创建全局变量:

窗口对象:

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

jQuery 对象:

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

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

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

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

您还可以使用闭包来定义全局变量或私有成员变量

长话短说:最好避免使用全局变量

 

资料来源:

  1. https://stackoverflow.com/a/3352033/2493918
  2. https://stackoverflow.com/a/2895772/2493918
  3. 如何干净地处理全局变量?
  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 编写插件时,我将所有代码放在立即调用函数表达式(IIFE)中,然后传递函数jQuery,并将参数命名为$。此闭包允许您拥有自己的私有变量并保护 jQuery$别名:

(function( $ ){

    ...YOUR CODE HERE...

})( jQuery );

Ben Alman在他的网站上有一篇很好的帖子,提供了有关 IIFE 的更多信息。

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

于 2013-08-13T13:10:42.450 回答