Javascript 为什么计算函数会自动运行

Javascript 为什么计算函数会自动运行,javascript,knockout.js,Javascript,Knockout.js,我的代码中有一个这样的敲除计算函数 self.TestFunction = ko.computed(function () { //Some logic }, self).extend({ rateLimit: 100 }); 此函数将自动执行,而不会绑定到任何html元素。我想知道背后的原因 我想知道背后的原因 通常,您使用ko.computed作为其返回值。然而,这并不是它们的唯一用途。通常,您会看到代码使用ko.computed更像是订阅多个值的

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

 self.TestFunction = ko.computed(function () {
            //Some logic
        }, self).extend({ rateLimit: 100 });
此函数将自动执行,而不会绑定到任何html元素。我想知道背后的原因

我想知道背后的原因

通常,您使用
ko.computed
作为其返回值。然而,这并不是它们的唯一用途。通常,您会看到代码使用
ko.computed
更像是订阅多个值的一种奇特方式。比如说

// 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!");
});
现在,为了使knockout能够“运行”登录到控制台的副作用,它必须找出它的依赖项是什么。它通过运行一次
someSideEffect
函数来实现

如注释中所述,
pureComputed
属性的工作方式不同。它们只在请求自己的值时运行内部函数

简言之:

  • ko.computed
    在创建时运行其内部函数,因为它支持副作用
  • ko.pureComputed
    仅在请求其值时运行一次,在没有依赖项时暂停
我想知道背后的原因

通常,您使用
ko.computed
作为其返回值。然而,这并不是它们的唯一用途。通常,您会看到代码使用
ko.computed
更像是订阅多个值的一种奇特方式。比如说

// 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!");
});
现在,为了使knockout能够“运行”登录到控制台的副作用,它必须找出它的依赖项是什么。它通过运行一次
someSideEffect
函数来实现

如注释中所述,
pureComputed
属性的工作方式不同。它们只在请求自己的值时运行内部函数

简言之:

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

您可以使用可能的副本。这只会在被观察到或有订阅时计算。你是在问KO如何在没有HTML绑定的情况下运行订阅,还是在你认为不应该的情况下为什么要执行此操作?@VLAZ我是在问KO如何在没有HTML绑定的情况下运行订阅。@James好的,在这种情况下……为什么不应该?订阅是针对JS对象的,让JS对象相互引用并相互影响是没有问题的。为什么你需要一个HTML绑定来达到这个效果呢?你可以用它的可能的副本来代替。这只会在被观察到或有订阅时计算。你是在问KO如何在没有HTML绑定的情况下运行订阅,还是在你认为不应该的情况下为什么要执行此操作?@VLAZ我是在问KO如何在没有HTML绑定的情况下运行订阅。@James好的,在这种情况下……为什么不应该?订阅是针对JS对象的,让JS对象相互引用并相互影响是没有问题的。为什么需要HTML绑定来实现这种效果?