javascript作用域 (Scope) 什么是作用域?

極客小俊
一個把邏輯思維轉(zhuǎn)變?yōu)榇a的技術(shù)博主

1.什么是作用域?
作用域
英文:scope
從字面上理解,作用域
就是作用的區(qū)域或者起作用的范圍
, 那么在我們的javascript
當(dāng)中,作用域
就是指一個變量
或者函數(shù)
的作用范圍! ?
在javascript
中作用域
規(guī)定了 變量
或 函數(shù)
有權(quán)訪問的其他數(shù)據(jù)!
我們在項目開發(fā)當(dāng)中,會經(jīng)常遇見跟作用域
有關(guān)的操作, 其實作用域的核心思想就是隔離變量,在不同作用域下的同名變量是不會有沖突的
2.作用域的分類
在javascript
中 作用域
分為兩種: 如下
全局作用域
局部作用域(也稱為:函數(shù)作用域)
3.全局作用域
什么是全局作用域?
概念
?當(dāng)我們打開瀏覽器加載HTML
頁面的時候,首先瀏覽器會提供一個供全局JS代碼執(zhí)行的環(huán)境 這個環(huán)境俗稱: ?全局作用域
只要是編寫在script
標(biāo)簽中的javascript
代碼、例如;變量、函數(shù)等..那么這些都在全局作用域
中!
全局作用域
在頁面打開的時候就自動創(chuàng)建,也就是說當(dāng)你使用瀏覽器打開頁面的時候,同時也加載了script
標(biāo)簽之后,全局作用域
便由此產(chǎn)生了, 并且在頁面關(guān)閉或者說關(guān)閉瀏覽器的時候全局作用域
也自動銷毀掉了, 用簡單的一句話概括就是: 在打開時創(chuàng)建,在關(guān)閉時銷毀
什么是全局變量和全局函數(shù)?
在全局作用域
下聲明的變量
通常叫做全局變量
在全局作用域
下聲明的函數(shù)
通常叫做全局函數(shù)
所以在全局作用域
下聲明的變量
或函數(shù)
等.. 在頁面中的任何地方都可以使用!
代碼說明
?<script type="text/javascript">
? ? ?//全局作用域開始------------------------
? ? ?
? ? ?//定義一個全局函數(shù)
? ? ?function test() {
? ? ? ? ?console.log('hello world');
? ? ?}
? //定義一個全局變量
? var num=100;
?
? ? ?//全局作用域結(jié)束------------------------
?</script>
有些人就會問了為什么
全局作用域
中的變量
和函數(shù)
可以在任意的地方使用呢?原因是什么?那么說到這里就不得不提一個東西那就是
window對象
windows對象
首先了解一下window對象是什么與如何產(chǎn)生的?
上面說了當(dāng)你打開一個頁面的時候就會產(chǎn)生一個全局作用域
, 打開多少頁面全局作用域
就有幾個! 而每個全局作用域(這樣的執(zhí)行環(huán)境)
都會對應(yīng)的創(chuàng)建一個與之關(guān)聯(lián)的對象
, 并且在 這個全局環(huán)境
中定義的所有變量
和函數(shù)
統(tǒng)統(tǒng)保存到這個對象
中,而這個對象就是我們要說的 window對象
!
所以,在全局作用域
中就有一個全局對象window
它代表的就是一個瀏覽器窗口,window對象
由瀏覽器創(chuàng)建,打開一個窗口就會自動生成一個window對象
,也就是說可以直接使用!
所以全局執(zhí)行環(huán)境
是最外層的作用域
,全局執(zhí)行環(huán)境
你也可以理解為 就是window對象
全局作用域、window對象之間的關(guān)系
全局作用域
是腳本中,最外層
的一個作用域
, 在web瀏覽器中, 全局作用域會被認(rèn)為就是window對象
那么因此 所有的全局變量
和全局函數(shù)
也都是作為window對象
的屬性
和方法
來進(jìn)行保存的,明白這一點很重要!
代碼說明:
?//定義一個全局函數(shù)
?function test() {
? ? ?console.log('hello world');
?}
?//定義全局變量
?var num=100;
?var num2=500;
?var num3=3.14;
?
?//變量會作為window對象的屬性進(jìn)行保存
?console.log(window.num);
?console.log(window.num2);
?console.log(window.num3);
?//函數(shù)會作為window對象的方法進(jìn)行保存
?window.test();
小結(jié)
在全局作用域
中我們創(chuàng)建的變量和函數(shù)都
會作為window對象
的屬性
來保存
