【问题标题】:Javascipt emulates private variables but javascript are already private because of scope?Javascript 模拟私有变量,但由于作用域,javascript 已经是私有的?
【发布时间】:2019-12-08 16:42:05
【问题描述】:

我刚才一直在学习 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 之外访问它,因此薪水不是已经私有了吗?我从这个例子中理解的是闭包模拟私有方法。

【问题讨论】:

    标签: javascript closures


    【解决方案1】:

    稍微处理你的问题:

    工资不是已经私有了,因为您无法在此 manageSalary 之外访问它吗?

    是的。

    在这个例子中,闭包究竟是如何将薪水变量设为私有的?

    闭包不会 salary 私有。正如你所说,它已经是私人的。闭包利用了salary 是私有的事实,但它们(闭包)不是。 manageSalary 的返回值是一个对象,上面有那些闭包作为(有效的)方法。这些方法可以访问salary,但else 无权访问它。

    【讨论】:

    • 好吧,我想我当时理解正确。唯一让我感到困惑的是,为什么大多数示例都将闭包与私有变量相关联。是否有一些我还没有的场景可以最好地展示闭包如何在 javascript 中模拟私有变量?
    • @KariasBolster - 我不明白这个问题。但请注意,您说的是“私有变量”。大多数谈论这样做的地方都在谈论模拟私有属性。例如:function Counter() { var value = 0; return {current: function() { return value; }, increment: function() { return ++value; } } 通过new Counter 创建的实例实际上有一个名为value 的私有属性。 (当然,这将全部是soon be moot,因为真正的私有字段将出现在 JS 中。)
    • 对不起,我想我想问的是为什么在变量已经是私有的时候还需要模拟私有变量。但我想这将取决于一个人试图实现的目标,而这将超出主题。无论如何,谢谢你为我解决问题。
    • @KariasBolster - 他们没有模拟私有变量。他们正在模拟私有 properties
    猜你喜欢
    • 2018-08-24
    • 2011-12-03
    • 2015-06-30
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    相关资源
    最近更新 更多