2012-03-17 53 views
1

在这篇文章中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

我不会陷入具体的例子。他们正试图使其易于消化。想象一下,如果你想跟踪更复杂的状态。那时它变得真正有用​​。 – ChaosPandion 2012-03-17 20:23:12

+0

这只是一个人推翻封闭的例子。完全没用。 – 2012-03-17 20:23:21

+0

:)是的,然后有人可以给一个类似,但更真实的世界的例子 – user310291 2012-03-17 20:26:08

回答

5

它不会做同样的事情。第二个示例强制您在现场打印输出,而第一个示例允许您延迟输出。换句话说,在第一种情况下,您不需要在范围内有agename的位置打印输出;在第二个例子中,你这样做。

当然确实需要将bobGreeter“运输”到您实际调用greet的范围,并且需要传输1值而不是2,这并不是最有说服力的论点。但请记住,在一般情况下,它是1反对N.

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

+0

听起来很好的解释,会认为关于它然后回来... – user310291 2012-03-17 20:27:26

+0

作者给出了其他很好的例子。这只是第一个是太简单:) – user310291 2012-03-17 20:30:20

+0

可能是有用的不知何故这种情况下http://stackoverflow.com/questions/9777856/solving-ugly-syntax-for-getter-in-js – user310291 2012-03-19 21:04:06

0

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

1

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

+0

谢谢你似乎有趣的我看着它。 – user310291 2012-03-17 20:33:48

1

它给予更多的灵活性。这种情况已经足够简化了,但在更复杂的情况下,您可能需要它。

相关问题