在这篇文章中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
最佳答案
它不做同样的事情。第二个示例强制您立即打印输出,而第一个示例允许您延迟打印。
换句话说:在第一种情况下,您不需要在范围内有 age
和 name
的地方打印输出;在第二个示例中,您可以。
当然,您确实需要以某种方式“传输”bobGreeter
到您实际调用 greet
的范围,并且需要传输 1 个值而不是2 不是最有说服力的论点。但请记住,在一般情况下,它是 1 对 N。
还有许多其他原因使闭包引人注目,无法用这个特定示例来说明。
关于javascript - 为什么在这种简单的情况下使用闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9753382/