我从闭包返回的函数在外部范围内是否可用

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

本文关键字:范围内 外部 是否 函数 闭包 返回      更新时间:2023-09-26

离开javascript一段时间后,我正在构建一个小库,并且可能想多了。 我把我的图书馆包裹在一个封闭中,虽然我知道我可以用类似 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();