簡體   English   中英

Javascript 詳細吊裝順序

[英]Order of hoisting in Javascript detailed

問題 #1。

我知道“var”的范圍是 function,但是 javascript 是否按字母順序訂購提升機? 或先到先得。

function x () {
    var b;
    var c;
    var a;
}

提升之后,結果是變成這個還是和上面一樣:

function x() {
    var a;
    var b;
    var c;
}

問題2。

我知道 function 在變量之前被提升。

當我運行這個:

 function x() { var b = 2; var c = 3; var a = 1; function y() { var d = 4; } } console.log(x);

我沒有看到在 vars 之前打印“函數 y()”。

提升時“創建”變量名稱的順序無關緊要,因為僅創建變量名稱(可能除了創建與變量名稱相關的 function 之外,在 function 聲明的情況下)不會影響別的什么 它所涉及的任何內容都沒有任何副作用,因此解釋器實際創建變量名的順序是不透明且不相關的。 這是一件好事——這意味着你不必擔心它。

那是假設您想知道事情在運行時是如何工作的,並且沒有任何語法錯誤。 如果您確實有語法錯誤並且正在使用constlet聲明變量,則禁止在同一 scope 中為同一變量名重復變量聲明,因此第一個重復標識符(與源代碼中的順序相同)將拋出語法錯誤。

 let foo; function foo() { // <-- This line throws }

我沒有看到在 vars 之前打印“函數 y()”。

當你這樣做

console.log(x);

其中x是 function,您將獲得 function源代碼,這將與您在腳本中輸入的完全相同 - 代碼不會以任何方式更改,因此不會看到任何“提升”效果.

暫無
暫無

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

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