我可以在外部范围内使用从闭包返回的函数吗?

时间:2015-02-04 05:16:25

标签: javascript closures

我在离开javascript一段时间后正在建立一个小型库,我可能过度思考了这一点。我把我的图书馆包裹在一个封闭中,虽然我知道我可以用window.namespace.function之类的东西返回我想要的东西,但我想知道我是否可以更优雅地做这样的事情:

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

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

  return namespace
})(jQuery)

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

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

1 个答案:

答案 0 :(得分:0)

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

您可以像这样分配:

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

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

  return namespace;
})(jQuery);

然后,您可以从外部作用域调用doStuff()函数,如下所示:

ns.doStuff();