在 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()
。
我是 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()
。