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

标签 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

最佳答案

它不做同样的事情。第二个示例强制您立即打印输出,而第一个示例允许您延迟打印。

换句话说:在第一种情况下,您不需要在范围内有 agename 的地方打印输出;在第二个示例中,您可以。

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

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

关于javascript - 为什么在这种简单的情况下使用闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9753382/

相关文章:

JavaScript 在 html pg 中不起作用

javascript - 对象函数作用域

swift - 使用 Swift : body of closure not executed 进行单元测试

scala - 对这个带有 & 不带 = 的代码片段返回类型感到非常困惑

java - 内部类是轻量级的吗?

javascript - 两个版本的函数有什么区别

javascript - JQuery 仅切换 1 个项目,其他项目未单击

javascript - jQuery 位置 DIV 固定在滚动上

javascript - 如何从切换开关 JavaScript 获取输入

javascript - jQuery .animate 队列不起作用