勵志

勵志人生知識庫

私有作用域

私有作用域是指在函式執行時創建的一個新的記憶體空間,用於解析函式體內的代碼。這個作用域是私有的,即函式內的變數對函式外是不可見的。在ES6之前,JavaScript只有全局作用域和局部(私有)作用域兩種。在ES6之後,引入了塊級作用域,但在這裡我們不詳細討論。

當在私有作用域中聲明變數時,這些變數會先進行變數提升,即在代碼執行前就已經在作用域中存在了。如果使用`var`關鍵字聲明變數,那麼這個變數將被視為私有變數,與全局作用域沒有關係。如果沒有使用`var`聲明變數,那麼這個變數會向其上級作用域(通常是當前作用域的上級函式作用域)查找,如果上級作用域沒有找到,則會繼續向上查找,直到全局作用域。如果全局作用域也沒有找到這個變數,那麼最後會嘗試給`window`對象設定這個屬性。這種查找機制被稱為「作用域鏈」。

私有作用域中的代碼執行完畢後,這個作用域會被釋放和銷毀。但是,如果私有作用域中的代碼返回了一個引用數據類型的值,並且在函式外被其他對象接收,那麼這個作用域可能不會被銷毀,因為它可能被其他對象所引用。這種情況通常被稱為「閉包」。

例如,代碼`varnum=10; function(num1){console.log(num1); varnum2=12;}`中,`num1`和`num2`是在私有作用域中聲明的變數,因此它們是私有的。當函式執行時,它會形成一個新的私有的作用域,並按照上述的步驟執行。如果函式沒有返回任何值,那麼函式執行完畢後,這個作用域會被銷毀。如果函式返回了一個值,並且這個值被其他對象所引用,那麼這個作用域可能不會被銷毀,從而形成閉包。