给我解释一下JavaScript中的闭包。

我想了解一下JavaScript中的闭包是什么，以及如何在代码中使用它。
闭包是指一个函数能够访问并操作在其定义环境外部的变量。在JavaScript中，如果一个函数内部定义了另一个函数，那么内部函数就可以使用外部函数的变量或参数，即生成了一个闭包。

使用闭包可以实现一些特定的功能，如实现私有变量、缓存函数等。其中最常见的应用是将函数作为返回值，使得外部函数可以访问并操作内部函数的局部变量。

以下是一个例子：

```js
function outer() {
  const x = 10;
  function inner(y) {
    return x + y;
  }
  return inner;
}

const sum = outer();
console.log(sum(5)); // 15
```

在这个例子中，`outer` 函数返回了 `inner` 函数，并将其赋值给变量 `sum`。由于 `inner` 函数使用了 `x` 变量，所以 `outer` 函数的执行环境被保存下来，并在 `sum` 被调用时被引用，使得 `sum` 函数可以访问 `outer` 函数中的变量。