javascript - 在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];
}
解决方案
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 x
is not a String already。
推荐阅读
- python - statsmodels 引发 TypeError:优化输入中的输入类型不支持 ufunc 'isfinite'
- google-apps-script - 谷歌表格脚本中 UDF 和过滤数据的绝对参考
- eclipse - Eclipse 代码格式化程序需要在 Eclipse 重启后重新导入
- html - 将表格元素放在 gif 背景上
- arrays - 通过一次选择最左边的任何一个元素来查找具有 n(n 是偶数)个元素的整数数组的 n/2 个元素的最大总和
- powershell - 使用 powershell 复制选定的列并插入到另一个 csv
- html - 将完整尺寸的 HTML 页面插入到汇合页面(在本例中为 gitgraph 页面)
- .net-core - .net 标准 Fsharp.Core 4.7.0.0 = 4.5.2?
- javascript - 打字稿:类型“X”不匹配签名“(prevState:未定义):未定义”
- jquery - checkall 在分页的第二页中不起作用