首页 > 解决方案 > 在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];
}

标签: javascriptv8

解决方案


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()if xis not a String already。


推荐阅读