JavaScript 自執行匿名函式中這個問題是什麼?
假設這裡有一段示例程式碼,我們需要說明這段程式碼可能的輸出並解釋原因。
var name = 'Zakir';
(() => {
name = 'Rahul';
return;
console.log(name);
function name(){
let lastName = 'Singh';
}
})();
console.log(name);讓我們用一種簡單的方法逐行分析這個問題。
1 → ‘Zakir’ 儲存在變數 name 中。
3 → 我們進入一個自執行匿名函式。
4 → 變數 name 被重新初始化為 ‘Rahul’。
5 → 遇到 return 語句,所以我們退出函式。
15 → 將 name 變數(當前值為 ‘Rahul’)列印到螢幕。
所以,最終輸出將是
Rahul
但是,不幸的是,這是錯誤的。讓我們再次仔細檢查程式碼,這次要記住變數和函式提升的概念。
1 → ‘Zakir’ 儲存在變數 name 中。
3 → 我們進入一個自執行匿名函式。
當我們進入函式時,函式提升生效,在自執行函式底部定義的函式 name() 被提升到自執行函式的頂部。在這個中間狀態,程式碼將類似於:
示例
let name = 'Zakir';
(() => {
let name;
name = 'Rahul';
return;
console.log(name);
name = function(){
let lastName = 'Singh';
}
})();
console.log(name);請注意,每當變數/函式被提升到其作用域的頂部時,它只會被定義和初始化,它在其實際位置被初始化,在頂部它是未定義的,但它存在。
因此,當變數 name 被重新初始化時,是區域性變數 name 被重新初始化,而不是全域性變數。之後,我們從自執行函式返回,並將全域性變數 name 列印到控制檯,該變數仍然儲存 ‘Zakir’。因此,輸出將是:
輸出
Zakir
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP