首页 > 解决方案 > 首选哪种 Javascript 闭包场景?

问题描述

在什么情况下 counter1 更可取?在什么情况下计数器 2 会更好?

我知道在全局声明变量时可能无法预测,但是有没有一种情况比在函数内声明它更可取?

// counter1 code
function counterMaker() {
  let count = 0;
  return function counter() {
    return count++;
  };
}


// counter2 code
let count = 10;

function counter2() {
  return count++;
}

标签: javascriptvariablesscopeclosurescounter

解决方案


计数器 1 代码的说明。

// counter1 code
function counterMaker() {
  let count = 0;
  return function counter() {
    return count++;
  };
}

在这里,您将一个函数返回给调用者。所以可以在调用者处做这样的事情。

var c = counterMaker()
c() //0
c() //1
c() //1
var b = counterMaker()
b() //0
b() //1
b() //1

因为您在尝试使用函数表达式时尝试封闭该函数和变量环境。所以你的增量功能不会暴露在外面。如果这是有道理的,那么你就会明白为什么要关闭和在哪里关闭的全部简洁性。

代码2的解释

// counter2 code
let count = 10;

function counter2() {
  return count++;
}

您正在尝试将增量函数公开到全局中,现在您将无法像上面的代码 1 那样创建多个实例。因此,每次调用函数 counter2 时,它只会增加什么。


推荐阅读