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

use*_*291 1 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();
Run Code Online (Sandbox Code Playgroud)

为什么它比它更有价值

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

greeter("Bob", 47);
Run Code Online (Sandbox Code Playgroud)

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

更新2:对于这种情况,它是否有用?在js中解决getter的丑陋语法

Jon*_*Jon 5

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

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

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

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