我一直在研究 v8 源代码,特别是“mksnapshot”工具如何在 v8 二进制文件中包含本机 javascript 文件(runtime.js、json.js...)的编译图像,并注意到它还包含一个(有点)源的缩小版本。例如,在检查 d8 可执行文件的内容时,我看到以下代码段:
var $JSON=global.JSON;
function Revive(a,b,c){
var d=a[b];
if((%_IsObject(d))){
if((%_IsArray(d))){
var g=d.length;
在“src/json.js”的开头,我看到:
var $JSON = global.JSON;
function Revive(holder, name, reviver) {
var val = holder[name];
if (IS_OBJECT(val)) {
if (IS_ARRAY(val)) {
var length = val.length;
显然这两个片段是等价的,但第二个在编译过程中被转换为第一个。
如果包含原始代码以使用“toString”进行检查,我会理解,但是当我在 d8 中输入“JSON.stringify”时,我看到的只是“function stringify() { [native code] }”,那么重点是什么这个?