這是我執行的東西
function c(){
return 2 3;
}
console.log(c);
console.log(c());
我知道執行時幕后會發生什么,console.log(c())但說到console.log(c)我有點困惑。
因為console.log(c)我得到了輸出:
f c(){
return 2 3;
}
這里發生了什么?
c 是將整個函式定義存盤到其中還是存盤函式定義的地址?
如果它存盤整個函式定義,那么它以什么形式存盤?它是否存盤為字串?
或者如果它存盤地址那么如何?因為當行程運行時,記憶體包含機器指令而不是 JavaScript 程式。那么它是從哪里來的呢?
uj5u.com熱心網友回復:
函式就像一本書,每個函式都有一個唯一的標題,它們存盤在您的存盤空間中的某個位置。因此,當您說“請給我名稱為 'c' 的函式”時,它將給您整個函式,而不僅僅是名稱。就像你在圖書館里要一本特定的書一樣,他們會給你整本書,而不僅僅是帶有標題的首頁。
如果您只想列印名稱,您只需說 console.log(c.name)
希望這有幫助:)
uj5u.com熱心網友回復:
Function建構式重寫toString()繼承自的方法Object.prototype,重寫的實作回傳一個字串,其中包含用于定義函式的源代碼。
Function.prototype.toString === Object.prototype.toString // false
toString()當函式被表示為文本值時,JavaScript 會自動呼叫該方法,例如,當您記錄函式時。
因此,在您的情況下,console.log(c)執行為console.log(c.toString()).
如果您分配Object.prototype.toStringto Function.prototype.toString,您將獲得 javascript 用于物件的默認表示形式。
Function.prototype.toString = Object.prototype.toString;
function c(){
return 2 3;
}
console.log(c);
注意:函式的源代碼表示僅為用戶定義的函式記錄。對于內置函式,您將獲得如下所示的日志:
function () {
[native code]
}
uj5u.com熱心網友回復:
存盤在記憶體中的是函式的源代碼。c是對存盤源代碼的記憶體位置的參考(地址)。當代碼運行時,它才會被解釋為機器指令。我相信即使像 V8 這樣的引擎仍然會在運行時解釋代碼(盡管如果我錯了,對這些型別的引擎更了解的人可以在這里糾正我)。
正如Yousaf 在他們的回答中所說,僅通過名稱呼叫任何物件都會自動呼叫該toString()方法。
我不知道在 JavaScript 中是否可以訪問確切的地址,就像在 C 等低級語言中一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/488774.html
標籤:javascript
