在本文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
,它是否有用答案 0 :(得分:5)
它没有做同样的事情。第二个示例强制您在现场打印输出,而第一个示例允许您延迟输出。
换句话说:在第一种情况下,您不需要在范围age
和name
的位置打印输出;在第二个例子中,你做了。
当然,你需要某种方式"运输" bobGreeter
到你实际上会在其上调用greet
的范围,并且需要传输1值而不是2而不是最引人注目的参数。但请记住,在一般情况下,它是针对N的。
还有许多其他原因使闭包引人注目,这个特定的例子无法说明。
答案 1 :(得分:1)
观看此视频http://pyvideo.org/video/880/stop-writing-classes
,虽然它在Python中的概念是可转移的。通常如果你有一个具有一个功能的类,那就太过分了。
答案 2 :(得分:1)
它提供了更大的灵活性。这种情况足够简化,但在更复杂的情况下,您可能需要它。
答案 3 :(得分:0)
我认为它只是一个简单的例子来说明闭包的概念。