[英]Javascript functions parsing order
有人可以詳細解釋為什么在以下函數中,返回值是1.5? javascript是從底部到頂部解析還是有更多內容?
(function f() {
function f() { return 1; }
return f();
function f() { return 2; }
function f() { return 1.5; }
})();
功能被“ 提升 ”到他們所居住的范圍的頂部。
所以你的代碼實際上是:
(function f() {
function f() { return 1; }
function f() { return 2; }
function f() { return 1.5; }
return f();
})();
QED:
(function f() {
function f() { return 1; }
return f();
function f() { return 1.5; }
function f() { return 2; }
})(); //=> 2
由於吊裝,這相當於
(function f(){
var f;
f = function(){ return 1; };
f = function(){ return 2; };
f = function(){ return 1.5; };
return f();
})();
吊裝可能很棘手,因為這里有兩個方面。 首先,提升變量定義
變量的每個定義實際上都是其范圍頂部的變量聲明,以及定義所在位置的賦值。 1
接下來,提升每個函數初始化
函數初始化發生在父函數的頂部(在vars之上)。 由於名稱已作為參數或函數存在的vars聲明是no-ops,因此我們得到了一些令人驚訝的結果。 1
當js解釋器首先進入函數時,它會查找所有var和函數結構(但不是匿名函數)並按照它們找到它們的順序對它們進行調整,之后它開始從函數的開始執行代碼。 在你的情況下f函數返回1.5是最后一個,所以它改變了previos 2 f功能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.