【问题标题】:Explain this please: var MYLIBRARY = MYLIBRARY || (function(){ [duplicate]请解释一下: var MYLIBRARY = MYLIBRARY || (函数(){ [重复]
【发布时间】:2014-11-07 20:27:07
【问题描述】:

我偶然发现了一个我不确定它是做什么的构造

var MYLIBRARY = MYLIBRARY || (function(){

https://stackoverflow.com/a/2190927/680815

我没有太多的代表。但是,所以我不能发表评论来询问这么好,抱歉造成混乱。 :)

这是否意味着如果定义了 MYLIBRARY 则使用它,如果不分配封装代码?

谢谢,

【问题讨论】:

  • 这定义了 MYLIBRARY 如果它还没有设置。它没有分配对函数的引用;它正在调用函数并分配其返回值。
  • (我会注意到“已设置”不是正确的术语,但希望您明白这一点。这种模式通常用于在多个文件的名称空间中放置许多类似类的东西。

标签: javascript encapsulation


【解决方案1】:

是的,它与您的想法差不多。

如果定义了MYLIBRARY,则使用它,如果没有,则为其分配封装代码?

【讨论】:

    【解决方案2】:

    检查 MYLIBRARY 是否未定义、null 或 false 然后保持原样,否则它将是分配的函数。

    换句话说:

    if (!MYLIBRARY) {
        MYLIBRARY = function(){};
    }
    

    但在您的 sn-p 中,我认为 MYLIBRARY 始终未定义,因为您在检查或复制时设置了变量。

    【讨论】:

    • 您的代码示例不等效,因为您删除了var,这意味着如果之前没有声明它会抛出。不,MYLIBRARY 并不总是undefined,除非这段代码恰好在函数内部。似乎更有可能是全球性的。
    • 如果 MYLIBRARY 是全局的,那么为什么要重新声明它呢?你认为这是对的吗?无论如何,我说:“我认为”这意味着它取决于之前的代码。
    • 嗯,这就是重点。如果它是全球性的,但它可能会或可能不会被定义,那么您可以使用问题中的技术。对于本地人来说,它没有意义,除非它是一个可能收到也可能没有收到值的函数参数。
    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2020-06-21
    • 2011-05-11
    • 2013-07-15
    • 2013-04-03
    相关资源
    最近更新 更多