JavaScript——作用域(包括:全局作用域、局部作用域、塊級作用域、全局變量、局部變量、作用域鏈)

作用域

  • JavaScript作用域就是代碼名字(一般是變量)在某個範圍內起作用和效果。

  • 作用:提高了程序邏輯的局部性, 增強了程序的可靠性,減少了名字衝突。

  • JavaScript的作用域分爲以下兩種:

    (1)全局作用域:在整個script標籤或者一個單獨的js文件內起作用

    (2)局部作用域(函數作用域):只能在函數內部起效果和作用

全局變量和局部變量

  • 根據作用域的不同,變量可以分爲全局變量和局部變量。

    (1)全局變量:在全局作用域下的變量,在全局下都可以使用,包括函數內部。並且,全局變量只有瀏覽器關閉的時候纔會銷燬,比較佔內存資源。

    (2)局部變量:在局部作用域下的變量,或者說成在函數內部的變量。並且,局部變量在程序執行完畢後就會立即銷燬,比較節約內存資源。

注意:
(1)在函數內部沒有聲明就直接賦值的變量是全局變量
(2)函數的形參可以看作是局部變量

作用域鏈

  • 作用域鏈:內部函數訪問外部函數的變量,採取的是鏈式查找的方式來決定取哪個值。(就近原則)
var num = 22;
function fn(){	//外部函數
  var num = 33;
  function fun(){		//內部函數
    console.log(num);
  }
  fun();
}
fn();		//輸出結果是:33

拓展(塊級作用域)

  • 在ES6之前是沒有塊作用域的概念,而ES6中新增了塊級作用域。

  • 任何一對花括號({})中的語句集都屬於一個塊,在這之中定義的所有變量在代碼塊外都是不可見的,我們稱之爲塊級作用域。在ES6中只要{}沒有和函數結合在一起,那麼應該就是“塊級作用域”。

  • 塊作用域由 { } 包括,if語句和for語句裏面的{ }也屬於塊作用域。

  • 在塊級作用域中,var定義的變量是全局變量,let定義的變量是局部變量。而在局部作用域中,無論是用var定義的變量還是用let定義的變量都是局部變量。

  • 無論是在塊級作用域還是局部作用域,省略變量前面的var或者let都會變成一個全局變量。


微信公衆號也會定期更新,覺得文章寫得還可以的,可以加個關注!點個贊!謝謝!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章