来自闭包的函数 I return 是否可以在外部作用域中使用?

Will functions I return from closures be available in the outer scope?

离开 javascript 一段时间后,我正在建立一个小型图书馆,可能是我想多了。我将我的库包裹在一个闭包中,虽然我知道我可以 return 我想要的东西 window.namespace.function,但我想知道我是否可以更优雅地做这样的事情:

(function($){
  var config = {...}

  var namespace = {
    doStuff: function() {
      // . . .
    },
  }

  return namespace
})(jQuery)

加载此脚本后,用户是否可以使用 namespace.doStuff() 之类的内容调用我的库?

此外,如果用户只是将我的库复制并粘贴到他们自己的闭包中,那么我的命名空间是否可以在他们的闭包中使用,但不能作为全局使用?

如果您将它分配给某物,它只会在外部范围内可用。因为它是你返回它,但没有将它分配给任何东西,所以它不可用。

您可以这样分配它:

var ns = (function($){
  var config = {...}

  var namespace = {
    doStuff: function() {
      // . . .
    },
  }

  return namespace;
})(jQuery);

然后,您可以像这样从外部范围调用 doStuff() 函数:

ns.doStuff();