4

越来越多javascript的这种模块化方法返回空函数。你可以在源代码中找到它node.js。它在require.js. 它有什么作用?

define(['jquery'] , function ($) {
    return function() {};
});

如果我要返回一个对象,我会这样做return {};,尽管我认为返回一个空对象没有用。可能想把变量放进去。因此,这显然是有价值的。我猜它与访问返回函数范围内的函数有关。

这是AMD 不是答案文章中的构造:

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?
};

尽管我在技术上并不完全“受到挑战”,但我希望有人可以用外行的方式来解释这一点,因为关于模块化的文章并不能让我高兴。

4

1 回答 1

1

你的代码错了。它应该是这样的自我执行功能:

(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;

这对于实现公共/私有变量很有用,因此您只需返回要公开的函数/变量。

于 2013-10-02T21:35:10.657 回答