为什么计算函数自动运行

时间:2019-06-06 10:53:36

标签: javascript knockout.js

我的代码中有一个这样的敲除计算函数

 self.TestFunction = ko.computed(function () {
            //Some logic
        }, self).extend({ rateLimit: 100 });

此函数自动执行,而没有绑定到任何html元素。我想知道其背后的原因。

1 个答案:

答案 0 :(得分:2)

  

我想知道其背后的原因

通常,您使用ko.computed作为其返回值。 但是,这不是他们的唯一用途。通常,您会看到使用ko.computed的代码更像是一种将subscribe转换为多个值的奇妙方式。例如

// Please note, I do *not* recommend these kinds of structures, I'm merely
// showing knockout allows them
const input1 = ko.observable("");
const input2 = ko.observable("");
const input3 = ko.observable("");

ko.computed(function someSideEffect() {
  input1();
  input2();
  input3();

  console.log("Some value has changed!");
});

现在,要使敲除能够“运行”登录控制台的副作用,它必须找出其依赖项。通过运行someSideEffect函数一次

如注释中所述,pureComputed属性的工作方式不同。他们仅在请求 own 值后才运行内部函数。

简而言之:

  • ko.computed在创建时会运行其内部功能,因为它支持副作用。
  • ko.pureComputed仅在请求其值时运行一次,在没有依赖项时暂停。