在Javascript Engine(适用于v8)中,在优化阶段确切意味着“隐式调用”是什么?

时间:2019-01-30 06:18:23

标签: javascript v8

我是javascript引擎的新手。在优化阶段,如果implicit call在某个块中,则优化器需要为此块添加一些检查。在这种情况下,implicit call的确切含义是什么?

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

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

1 个答案:

答案 0 :(得分:1)

V8开发人员在这里。恐怕我不确定您的意思,因此,我将尽我最大的猜测:“隐式调用”是从其语法上不能立即显而易见的调用。

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

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.toString()还不是字符串,则将隐式调用x