11

%我在很多代码中看到了。你能向我解释它的目的或它的作用吗?

编辑:我知道数学中的操作数,13 % 10 = 3但我看到的是return %foo.

查看v8 源文件时遇到此问题

为什么某些函数调用前面有一个 % 符号?

%CheckIsBootstrapping();
//---
// Only used by async-await.js
function RejectPromise(promise, reason, debugEvent) {
  %PromiseReject(promise, reason, debugEvent);
}
//---
var callbacks = %create_resolving_functions(promise, debugEvent);
4

1 回答 1

12

根据您在评论中提供的链接,该%字符似乎在某些V8 JavaScript 引擎源代码中用于指示将在解析 JavaScript 源代码时执行的 C++ 运行时方法。

例如,string.js中的行:

return %StringBuilderConcat(parts, len + 1, "");

当解析器遇到时,该StringBuilderConcat方法将被执行。您可以在runtime.h中找到 V8 JavaScript 文件可用的运行时方法列表(注意,我没有使用 C++ 的经验,所以就我所知,这与string.jsStringBuilderConcat中引用的方法无关,但我认为这是同一件事):

#define RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \
  /* Property access */ \
  F(GetProperty, 2, 1) \
  F(KeyedGetProperty, 2, 1) \
  /* ... */
  F(StringBuilderConcat, 3, 1) \
  /* ... */

如前所述,return %foo会在 JavaScript 中引发 SyntaxError。

于 2012-06-26T08:13:15.287 回答