为什么在这种简单的情况下使用闭包

时间:2012-03-17 20:19:51

标签: javascript closures

在本文http://howtonode.org/why-use-closure中给出了一个例子:

function greeter(name, age) {
  var message = name + ", who is " + age + " years old, says hi!";

  return function greet() {
    console.log(message);
  };
}

// Generate the closure
var bobGreeter = greeter("Bob", 47);

// Use the closure
bobGreeter();

为什么它比

更有价值
function greeter(name, age) {
  var message = name + ", who is " + age + " years old, says hi!";
    console.log(message);
}

greeter("Bob", 47);

哪个更短,显然是一样的东西?或者它没有?

更新2:对于这种情况Solving ugly syntax for getter in js

,它是否有用

4 个答案:

答案 0 :(得分:5)

它没有做同样的事情。第二个示例强制您在现场打印输出,而第一个示例允许您延迟输出。

换句话说:在第一种情况下,您不需要在范围agename的位置打印输出;在第二个例子中,你做了。

当然,你需要某种方式"运输" bobGreeter到你实际上会在其上调用greet的范围,并且需要传输1值而不是2而不是最引人注目的参数。但请记住,在一般情况下,它是针对N的。

还有许多其他原因使闭包引人注目,这个特定的例子无法说明。

答案 1 :(得分:1)

观看此视频http://pyvideo.org/video/880/stop-writing-classes,虽然它在Python中的概念是可转移的。通常如果你有一个具有一个功能的类,那就太过分了。

答案 2 :(得分:1)

它提供了更大的灵活性。这种情况足够简化,但在更复杂的情况下,您可能需要它。

答案 3 :(得分:0)

我认为它只是一个简单的例子来说明闭包的概念。