越来越多的 javascript
有这种返回空函数的模块化方法。您可以在 node.js
的源代码中找到它。它在 require.js
的文档中。它有什么作用?
define(['jquery'] , function ($) {
return function() {};
});
如果我要返回一个对象,我只会执行 return {};
,尽管我认为返回一个空对象没有用。可能想把 vars 放进去。所以这显然有一些有值(value)的东西。我猜它与访问返回函数范围内的函数有关。
这又是那个构造,在 AMD Is Not The Answer 中文章:
define(['dep1', 'dep2'], function (dep1, dep2) {
//Define the module value by returning a value.
return function () {};
});
但是上面的实际好处是什么,而不是仅仅返回你想要返回的语义上有意义的东西,例如在一个对象中?
您如何以这种方式访问功能外部范围内的事物?
function(baz) {
var foo = true,
bar = false;
if (baz) bar = true;
return function() {}; // wut?
};
虽然我在技术上并不完全“受到挑战”,但我希望有人能用外行的术语解释这一点,因为 articles about modularity不要让我开心。
最佳答案
您的代码有误。它应该是这样的自执行函数:
(function(baz) {
var foo = true,
bar = false;
if (baz) bar = true;
return function() {}; // wut?
});
所以你只是忘记了它前面的 (
。
现在你可能会把它当作一个表达式来使用,所以它会变成这样
var singleton = (function(baz) {
var foo = true,
bar = false;
if (baz) bar = true;
return function() {}; // wut?
});
现在您的单例变量将是一个简单的空函数。
如果你输入
return function() {
return foo;
}
它变得有用了:
singleton()
<- 返回 true
并且与您刚刚编写的模块模式非常相似:
return {
myFoo: foo
}
因此您可以使用 singleton.myFoo
访问它;
这对于实现公共(public)/私有(private)变量很有用,因此您只需返回要公开的函数/变量即可。
关于javascript - 为模块化返回空函数有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146998/