在 Javascript 引擎(对于 v8)中,"implicit call" 在优化阶段究竟意味着什么?

In Javascript Engine (for v8), what exactly means "implicit call" in optimization phases?

我是 javascript 引擎的新手。在优化阶段,如果 implicit call 在某个块中,优化器需要对该块添加一些检查。在这种情况下,implicit call 到底是什么意思?

据我了解,我认为下面一个是implicit call(cb function)。 是吗?

function foo(x, cb){
    let arr = [1,2,3,4];
    cb();
    return arr[1];
}

这里是 V8 开发人员。恐怕我不确定你的意思,所以我会给出我最好的猜测:"implicit call" 是一个从语法上不能立即看出的调用。

您的示例中的调用非常明确:查看代码的任何人(人类或编译器)都可以立即看到那里有一个调用。但是考虑这个例子:

function addFields(a, b) {
  return a.field + b.field;
}

没有电话,对吧?但是现在在应用程序的其他地方考虑这样的代码:

var b = {field: 42};
var a = {get field() {delete b.field; return 0;}}
console.log(addFields(a, b));

突然间,看似简单的字段加载会隐式调用 用户定义的函数,这可能会产生各种副作用(例如修改不相关的对象)。

隐式调用的其他示例是 "the value is: " + x 等表达式,如果 x 还不是字符串,它将隐式调用 x.toString()