浏览v8树,在src
目录下,有一些 js 文件,提供一些基本的 JS 对象,如 Math、Array 等。浏览这些文件,我看到标识符中包含百分号 (%),即%Foo
. 我一开始天真地以为这是 JS 标识符中允许的其他字符,但是当我在 shell 中尝试时,它对我大喊大叫,说我违反了语法规则。但如果是语法错误,那么 d8 是如何工作的呢?以下是来自实际源代码的示例:
src/apinatives.js 第 44 到 47 行,来自 github/v8/v8 的 git clone
function Instantiate(data, name) {
if (!%IsTemplate(data)) return data;
var tag = %GetTemplateField(data, kApiTagOffset);
switch (tag) {
src/apinatives.js 第 41 到 43 行,来自 github/v8/v8 的 git clone
function SetConstructor() {
if (%_IsConstructCall()) {
%SetInitialize(this);
为什么这个标识符不会产生语法错误。所有 js 文件,包括 math.js 和 string.js 以及所有其他文件?:wq