gpt4 book ai didi

没有闭包作用域的 Javascript 内存

转载 作者:行者123 更新时间:2023-11-30 11:59:03 29 4
gpt4 key购买 nike

JavaScript Ninja 的 secret 中,作者提出了以下方案,用于在没有闭包的情况下内存函数结果。他们通过利用函数是对象这一事实并在函数上定义一个属性来存储过去调用函数的结果来实现这一点。

function isPrime(value) {
if (!isPrime.answers) isPrime.answers = {};
if (isPrime.answers[value] != null) {
return isPrime.answers[value];
}
var prime = value != 1
for (var i = 2; i < value; i++) {
if (value % i === 0) {
prime = false;
break;
}
}
return isPrime.answers[value] = prime;
}

我有两个问题

  1. 他们的逻辑对我来说很有意义,但是当我运行代码时,所发生的只是创建了 answers 属性,但没有向其中添加任何内容 - 为什么?
  2. return isPrime.answers[value] = prime; 这行对我来说很有趣,当我使用它时 repl.it 会发出警告。在同一行中分配和返回全部不受欢迎吗?

最佳答案

1. Their logic makes sense to me, but when I run the code all that happens is the answers property is created but nothing gets added to it - why?

它似乎对我来说工作得很好。

console.log(isPrime(42));
console.log(isPrime.answers)

显示 answers 是一个非空对象:

enter image description here

function isPrime(value) {
if (!isPrime.answers) isPrime.answers = {};
if (isPrime.answers[value] != null) {
return isPrime.answers[value];
}
var prime = value != 1
for (var i = 2; i < value; i++) {
if (value % i === 0) {
prime = false;
break;
}
}
return isPrime.answers[value] = prime;
}

console.log(isPrime(42));
console.log(isPrime.answers)

2. [...] Is assigning and returning all in the same line frowned upon?

在这种情况下,分配基本上是一个 side effect ,并且副作用不受欢迎。也就是说,赋值是表达式并返回赋值是语言的一个特性,只要负责任地使用它,为什么不呢。

关于没有闭包作用域的 Javascript 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128930/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com