Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在v8源代码的JS文件中,某些函数调用前面会有一个%呢?_Javascript_Syntax_V8 - Fatal编程技术网

Javascript 为什么在v8源代码的JS文件中,某些函数调用前面会有一个%呢?

Javascript 为什么在v8源代码的JS文件中,某些函数调用前面会有一个%呢?,javascript,syntax,v8,Javascript,Syntax,V8,我在许多代码中看到了%。你能给我解释一下它的用途吗 编辑:我知道数学中的操作数13%10=3,但我看到的是return%foo 在查看时遇到此问题 为什么有些函数调用前面有%符号 %CheckIsBootstrapping(); //--- //仅由async-await.js使用 函数拒绝承诺(承诺、原因、调试事件){ %PromiseReject(承诺、理由、事件); } //--- var回调=%create_resolving_函数(promise、debugEvent); 根据注释中提

我在许多代码中看到了
%
。你能给我解释一下它的用途吗

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

在查看时遇到此问题

为什么有些函数调用前面有%符号

%CheckIsBootstrapping();
//---
//仅由async-await.js使用
函数拒绝承诺(承诺、原因、调试事件){
%PromiseReject(承诺、理由、事件);
}
//---
var回调=%create_resolving_函数(promise、debugEvent);

根据注释中提供的链接,在代码的某些源代码中使用“代码> %%/COD>字符”,以指示在解析JavaScript源时执行的C++运行时方法。p> 例如,中的行:

当解析器遇到时,将执行
StringBuilderConcat
方法。你可以找到一个运行时方法列表,它可以用于V8JavaScript文件(注释,我没有C++的经验,所以我知道这与ScRun.js中引用的<代码> StringBuilderConcat < /Cult>方法无关,但我认为是相同的事情):


如前所述,
return%foo
会在JavaScript中抛出一个语法错误。

那么,您可以尝试搜索
百分号JavaScript
。这将使您知道它是一个模运算符。
return%foo
?你有更完整的例子吗?我看不出会是什么样子。@dystroy举个例子,它看起来不像真正的javascript,而是某种动态插入。
return%foo
会抛出一个
SyntaxError
(意外标记)),所以我对“许多代码”感到好奇,在这些代码中,您遇到了一个小小的更正:解析器本身并不真正执行任何代码(除了
%IS_VAR
之外,如果参数不是变量,则会导致解析错误)。解析器只创建CallRuntime AST节点()。编译器然后要么发出对相应运行时函数()的调用,要么内联调用(例如
%\u IsSmi
:)。
return %StringBuilderConcat(parts, len + 1, "");
#define RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \
  /* Property access */ \
  F(GetProperty, 2, 1) \
  F(KeyedGetProperty, 2, 1) \
  /* ... */
  F(StringBuilderConcat, 3, 1) \
  /* ... */