JavaScript 使用闭包实现数据隐私保护
首先我们要了解Javascript中什么是闭包。
闭包: 一个函数和对外部环境的引用一起形成一个闭包。换句话说,我们可以说它是函数和它的词法作用域的组合,这意味着内部函数可以访问它的外部词法环境,即可以访问父函数的变量,这一起形成一个闭包。
示例:
JavaScript
<script>
function x() {
var a = "GeeksforGeeks";
function y() {
console.log(a);
}
return y;
}
x()();
</script>
输出:

在讨论数据隐私之前,我们先了解封装和数据隐藏。
数据隐藏 类似于一个变量,我们想要对其进行隐私保护,以便其他函数或代码的其他部分不能访问它,这被称为数据隐藏或数据隐私。换句话说,我们只是将数据封装起来,以防止代码的其他部分访问它。
通过一个示例来理解: 在这里,我们有一个计数器变量,我们可以从代码的任何地方访问它,包括增加函数的外部。
Javascript
<script>
var counter = 0;
function increase() {
counter++;
console.log("Access of counter from inside "
+ "the function as it forms a closure",
counter);
}
increase();
// No data Privacy
console.log("Accessed from outside also no "
+ "data privacy", counter);
</script>
输出:

所以在上述部分,我们可以看到数据没有隐藏或没有数据隐私。
现在让我们应用闭包的概念。我们将用一个函数来包裹 增加函数 ,这样增加函数就只能访问它的词法环境。
Javascript
<script>
function count() {
var counter = 0;
function increase() {
counter++;
console.log("Access of counter from "
+ "inside the function as it forms"
+ " a closure", counter);
}
return increase;
}
count()();
// Data Privacy is there is
// it will throw error
console.log("Accessed from outside also no"
+ " data privacy", counter);
</script>
输出:

在将增加函数封装在另一个函数下之后,我们可以保持数据的隐私,并且无法在函数外部调用counter。这一切都是由于闭包。闭包通过限制在增加函数的词法环境内访问counter起到了主要作用。
极客教程