来自闭包的函数 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();
离开 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();