小编Cou*_*uff的帖子

在JavaScript中记忆任何给定的递归函数

我感兴趣的是我们有一些函数f的场景,它是递归的,我们没有提供源代码.

我想要一个函数memoizer:Function - > Function,它接受说f并返回一个函数g,使得g = f(在某种意义上它们返回给定相同参数的相同值),当调用时首先检查被调用的参数是否为在它的'缓存'(它之前已经计算过的结果的内存)中,如果这样返回结果,否则它应该计算f,如果f用一些参数调用自己,这无异于用这些参数调用g,我想首先检查g的缓存是否包含这些参数,如果是,则返回结果,否则......

这很容易(在Javascript中)给出f的源代码,我只是以明显的方式定义memoize并做类似的事情

let f = memoize((...args) => {/* source code of f */});
Run Code Online (Sandbox Code Playgroud)

但这根本不吸引我(主要是因为我可能想要一个相同功能的memoized和非memoized版本然后我必须写两次相同的功能)如果我不知道将无法工作如何实施f.

如果我不清楚我在问什么,

我想要一个函数memoize,它具有如下函数

fact = n => n === 0 ? 1 : n * fact(n - 1);
Run Code Online (Sandbox Code Playgroud)

并且返回一些新函数g,使得所有n的fact(n)= g(n)并且例如当计算g(10)时存储fact(0),...,fact(10)的值,这是计算g(10)时计算,然后如果我要求说g(7)它在缓存中找到结果并将其返回给我.

我认为概念上可以检测f何时被调用,因为我有它的地址,也许我可以用一个新函数替换所有对f的调用,我计算f并存储结果,然后将值传递到它所在的位置通常去.但我不知道该怎么做(这听起来很不愉快).

javascript algorithm

6
推荐指数
2
解决办法
296
查看次数

检测javascript中的变量何时发生变化

我有一个 chrome 应用程序,我想在分辨率更改时正确调整大小(尺寸与屏幕宽度成正比)。我已经编写了一个函数,可以使用正确的尺寸重新绘制应用程序,现在我只想在需要时执行它。

分辨率更改会导致 screen.width 更改,但是(可能并不奇怪,因为它们与不同的事物有关)不会触发“调整大小”事件,据我所知,没有触发任何事件。

我知道 Proxy 对象(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)所以我写了一些代码来检测何时设置了变量并执行我的回调,这似乎有效,但在分辨率更改的情况下无效。

所以我在网上搜索并尝试了这个https://gist.github.com/eligrey/384583(这基本上是关于类似主题的几个 stackoverflow 问题中提供的答案,确实是我最初制作的,尽管缺乏新的抽象代理对象提供)。

这似乎也有效(在某种意义上,如果我说在完成 screen.watch("width", () => console.log("hello")); 然后做 screen.width = 100 ; 我的回调被执行)。但不是在分辨率改变的情况下(事实上,也许最重要的是,分配这个观察者似乎阻止了 screen.width 被分配)。

我有三个问题

1)当我分配一个把事情搞砸的观察者/代理时发生了什么。

2)我怎么能找出浏览器在这个细节级别上做什么(什么发送触发器来改变 screen.width?我猜是操作系统,它看起来像什么)

3) 有没有更好的方法来实现我最初的目标(chrome 应用程序调整大小)。

大多数情况下,我对问题 1) 感兴趣,不再关心 3)。

要复制我的问题,

  • 在 Firefox 或 chrome 中打开一个新标签
  • 转到开发人员控制台。
  • 检查 screen.width,更改分辨率,观察 screen.width 的变化
  • https://gist.github.com/eligrey/384583复制并粘贴代码
  • 做 screen.watch("width", (id, oldval, newval) => {console.log("hello"); return newval;});
  • 做 screen.width = 100; 并观察 hello 已记录并且 screen.width 设置为 100
  • 更改分辨率,观察 screen.width 未设置。

编辑 - 正如 Bertrand …

javascript google-chrome

3
推荐指数
1
解决办法
4001
查看次数

标签 统计

javascript ×2

algorithm ×1

google-chrome ×1