[英]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 聲明的情況下)不會影響別的什么。 它所涉及的任何內容都沒有任何副作用,因此解釋器實際創建變量名的順序是不透明且不相關的。 這是一件好事——這意味着你不必擔心它。
那是假設您想知道事情在運行時是如何工作的,並且沒有任何語法錯誤。 如果您確實有語法錯誤並且正在使用const
或let
聲明變量,則禁止在同一 scope 中為同一變量名重復變量聲明,因此第一個重復標識符(與源代碼中的順序相同)將拋出語法錯誤。
let foo; function foo() { // <-- This line throws }
我沒有看到在 vars 之前打印“函數 y()”。
當你這樣做
console.log(x);
其中x
是 function,您將獲得 function源代碼,這將與您在腳本中輸入的完全相同 - 代碼不會以任何方式更改,因此不會看到任何“提升”效果.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.