作用域 作用域表示一個代碼區域,也表示一個運行環境 JS中,有兩種作用域: 全局作用域 直接在腳本中書寫的代碼 在全局作用域中聲明的變數,會被提升到腳本塊的頂部,並且會成為全局對象的屬性。 函數作用域 函數中的代碼 在函數作用域中聲明的變數,會被提升到函數的頂部,並且不會成為全局對象的屬性. 因此, ...
作用域
作用域表示一個代碼區域,也表示一個運行環境
JS中,有兩種作用域:
- 全局作用域
直接在腳本中書寫的代碼
在全局作用域中聲明的變數,會被提升到腳本塊的頂部,並且會成為全局對象的屬性。
- 函數作用域
函數中的代碼
在函數作用域中聲明的變數,會被提升到函數的頂部,並且不會成為全局對象的屬性.
因此,函數中聲明的變數不會導致全局對象的污染
儘量的把功能封裝在函數中
但是,當函數成為一個表達式時,它既不會提升,也不會污染全局對象。
將函數變為一個函數表達式的方式之一,將函數用小括弧括起來。
然而,這樣一來,函數無法通過名稱調用。
如果書寫一個函數表達式,然後將立即調用,該函數稱之為立即執行函數 IIFE(Imdiately Invoked Function Expression)。
由於大部分情況下,函數表達式的函數名沒有實際意義,因此,可以省略函數名。
沒有名字的函數,稱之為匿名函數
作用域中可以使用的變數
全局作用域只能使用全局作用域中聲明的變數(包括函數)
函數作用域不僅能使用自身作用域中聲明的變數(包括函數),還能使用外部環境的變數(包括函數)
有的時候,某個函數比較複雜,在編寫的過程,可能需要另外一些函數來輔助它完成一些功能,而這些函數僅僅會被該函數使用,不會在其他位置使用,則可以將這些函數聲明到該函數的內部。
函數內部聲明的變數和外部衝突時,使用內部的。