【发布时间】:2020-08-07 00:48:28
【问题描述】:
a = function() {
if(this.n === undefined) {
this.n = 0;
}
this.n += 1;
return(this.b);
}
b = function() {
return(5);
}
在这种情况下,a 是有状态的,b 是无状态的。是否可以在javascript中创建一个函数hasSate(f),如果它具有a中的状态,则返回true,如果它没有b这样的状态,则返回false?如果是这样,你会怎么做?
【问题讨论】:
-
一个更好的问题是为什么这样的东西需要是动态的?作为逻辑开发人员,您应该了解您的方法的作用。
-
return 不是方法。
-
不,这是不可能的,因为状态是副作用。它不是语言的一部分。您可以测试一个函数是否由于有状态而是非幂等的(通过使用相同的参数调用它两次)。然而,这是一个坏主意,因为它会改变这种状态。并不是每个有状态的函数都是非幂等的。
-
@epascarello 这是有效的 JavaScript;以这种方式阅读它
return (this.b);如果您想评估代码并在同一行中提供返回值,它可能很有用,例如return (console.log('foo'), 5);返回5并且也记录了'foo'。为什么要这样做是另一回事,但关键是它是有效的代码。而且我认为我们不能假设 OP 不知道return是一个语句而不是一个方法。 -
@customcommander 我知道你为什么要这样做,但是在上面的代码中没有理由这样做。在过去的 20 多年里,我一直在告诉人们放弃 () 并返回。
标签: javascript function variables functional-programming closures