簡體   English   中英

在Javascript Engine(適用於v8)中,在優化階段確切意味着“隱式調用”是什么?

[英]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開發人員在這里。 恐怕我不確定您的意思,因此,我將盡我最大的猜測:“隱式調用”是從其語法上不能立即顯而易見的調用。

您的示例中的調用非常明確:查看代碼的任何人(人工或編譯器)都可以立即看到那里有一個調用。 但是,請考慮以下示例:

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還不是String,則它將隱式調用x.toString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM