【问题标题】:What happens to the JavaScript stack when a variable is passed to a function?将变量传递给函数时,JavaScript 堆栈会发生什么?
【发布时间】:2016-04-06 19:05:31
【问题描述】:

我正在使用 JavaScript (Express) 编写服务器端应用程序。所以我必须验证一大串字符(base 64 string)。我有点知道我想做什么以及如何做,但我有与性能相关的问题。

考虑上传的字符串非常大(最多 5 MB)。我已经编写了几个应该进行验证的函数,但我不知道幕后发生了什么。

function validate(str) {
    ....
    return bool;
}
var b64_string = '......';  // <- string can be 5 megabytes 
if(validate(b64_string) {
    doSomething(b64_string);
}

如果这是 C,将为 validate(str) 函数分配一个堆栈,并且将有 5mb 的内存用于传递的变量。

但是在 JavaScript 引擎中会发生什么?有没有办法发送“指针”来运行,这样内存消耗就不会太大? T

提前致谢!

【问题讨论】:

  • 我想知道为什么没有解释就投反对票¯_(ツ)_/¯

标签: javascript stack v8


【解决方案1】:

对象在javascript中是通过引用传递的。

我认为整数和字符串(等)不是,所以请注意这一点。

考虑将您的字符串添加到对象哈希引用中,然后您可以通过引用沿链​​向下传递。


例如:

var hashRef = {};
hashRef.b64_string = '......';  // <- string can be 5 megabytes 
function validate(hashRef) {
    ....
    return bool;
}
if(validate(hashRef)) {
    doSomething(hashRef);
}

【讨论】:

  • 不错。我会检查一下。由于我的函数都验证和修改我考虑使用闭包 - 但我已经将我的验证分离到一个模块所以这很痛苦......无论如何我会尝试(并且不会忘记+1你的答案)跨度>
  • 没问题@Rouz乐于助人^_^
  • “我相信整数和字符串(等)不是,所以要小心这一点”。在大多数引擎中,字符串在内部通过引用传递。
  • @Ginden 在哪些 js 引擎中是通过引用传递字符串的?
  • V8 在内部通过引用传递字符串。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 2021-12-30
  • 1970-01-01
  • 2015-09-21
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
相关资源
最近更新 更多