Javascipt模拟私有变量,但是由于范围的原因,javascript已经私有了?

时间:2019-12-08 16:42:05

标签: javascript closures

我刚才一直在学习javascript,目前处于关闭状态。据说闭包模拟私有变量。但是,不是不是只能在它们自己的作用域中访问变量才能使它们默认为私有?给出这个例子

function manageSalary () {
    let salary = 0;
    function updateSalary(amount) {
        salary += amount;
    }
    return {
        raise: function(amount) {
            updateSalary(amount);
        },
        deduct: function(amount) {
            updateSalary(amount);
        },
        current: function () {return salary}
    }
};

在此示例中,闭包到底如何使薪水变量变为私有?由于您无法在此manageSalary之外访问薪水,因此薪水已经不是私人的吗?从这个示例中我了解到的是,闭包代替了模拟私有方法。

1 个答案:

答案 0 :(得分:3)

轻微无序地解决您的问题:

  

由于您无法在manageSalary之外访问薪水,因此薪水是否已经是私人的?

是的

  

在此示例中,闭包到底如何使薪水变量变为私有?

闭包不是 salary私有的。如您所说,它已经是私有的。闭包利用salary是私有的事实,但它们(闭包)不是私有的。 manageSalary的返回值是一个对象,上面带有(有效)方法的那些闭包。这些方法可以访问salary,但是其他 else 都不能访问它。