亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中的聲明提升是什么

發布時間:2022-11-15 09:44:14 來源:億速云 閱讀:123 作者:iii 欄目:web開發

這篇文章主要講解了“JavaScript中的聲明提升是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JavaScript中的聲明提升是什么”吧!

聲明提升(hosting)是 JavaScript 解析器的一個特性,它會把代碼中的函數、變量聲明語句作用提取到它所在作用域的最前面。

函數的提升

JavaScript 是支持在函數聲明之前調用函數的。

say();function say() {  console.log("Hello");
}

解析器會掃描作用域內的代碼,把函數聲明提取到執行代碼的前面。所以,解析器是這樣看這段代碼的:

function say() {  console.log("Hello");
}say();

除了普通函數,async function, function *, async function * 也有相同的提升效果。

var 變量聲明提升

var 關鍵字的變量聲明會被提升,但變量的賦值不會被提升。

console.log(foo); // undefinedvar foo = "bar";console.log(foo); // 'bar'

以上代碼的解析結果為:

var foo;console.log(foo);
foo = "bar";console.log(foo);

這可能會導致一些奇怪的問題:

var x = "x in global";

(function () {  // 這里期望讀取全局變量
  console.log(x); // 結果為undefined. 
  /* ... */
  // 在函數內某處
  var x = "x in function";
})();

在過去,為了規避這種奇怪的提升,大家普遍把var 聲明寫在作用域的最前面。

var x='x';var y='y';function (){    var x;    var foo;    // ...}

當然,現在我們選擇不用 var,改用更合理的 letconst

letconst 變量聲明和死區

那么,letconst 就不存在變量提升了嗎?—— 未必。

看這個例子:

const x = "x in global";

(function () {  // 這里期望讀取全局變量
  console.log(x); // ReferenceError: Cannot access 'x' before initialization
  /* ... */
  // 在函數內某處
  const x = "x in function";
})();

執行報錯,說明 const x = "x in function"; 一行影響了作用域內的上方區域代碼。

解析器會掃描當前作用域下的 constlet 聲明,在聲明語句之前使用變量名都會觸發 ReferenceError。這樣可以避免上面提過的 var 提升問題和模糊不清的代碼范式。

class 關鍵字也有同樣的效果,new 一個未聲明的類也會發生 ReferenceError

new MyClass(); // ReferenceError: Cannot access 'MyClass' before initializationclass MyClass {}

有人認為這種情況不屬于提升,畢竟聲明和賦值都沒有提前;也有人認為這些語句在執行之前就產生了影響,其作用提升了。個人偏向后者,這是對(變量和類名)標識符的提升。

感謝各位的閱讀,以上就是“JavaScript中的聲明提升是什么”的內容了,經過本文的學習后,相信大家對JavaScript中的聲明提升是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

揭西县| 泾川县| 比如县| 临泽县| 博爱县| 高碑店市| 乌兰县| 天长市| 探索| 桦甸市| 张家界市| 五寨县| 临朐县| 平定县| 铜鼓县| 新野县| 绵阳市| 开阳县| 宜宾市| 洪雅县| 郓城县| 建瓯市| 兴国县| 平顶山市| 新巴尔虎右旗| 辉南县| 敦煌市| 保康县| 上虞市| 革吉县| 上栗县| 奈曼旗| 沙洋县| 吉木乃县| 郧西县| 台南县| 栖霞市| 晋州市| 冷水江市| 弥渡县| 深泽县|