我是javascript引擎的新手。在优化阶段,如果implicit call
在某个块中,则优化器需要为此块添加一些检查。在这种情况下,implicit call
的确切含义是什么?
据我了解,我认为下面是implicit call(cb function)
。
是吗?
function foo(x, cb){
let arr = [1,2,3,4];
cb();
return arr[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
。