淺談JavaScript作用域
一、作用域
通常來說,一段程序代碼中所用到的名字并不總是有效和可用的,而限定這個(gè)名字的可用性的代碼范圍就是這個(gè)名字的作用域。作用域的使用提高了程序邏輯的局部性,增強(qiáng)了程序的可靠性,減少了名字沖突。
JavaScript(es6前)中的作用域有兩種:
- 全局作用域
- 局部作用域(函數(shù)作用域)
- 在ES6后,還有一個(gè)塊級(jí)作用域,以后在詳述。
1、全局作用域
作用于所有代碼執(zhí)行的環(huán)境(整個(gè) script
標(biāo)簽內(nèi)部)或者一個(gè)獨(dú)立的 js 文件。
2、局部作用域
作用于函數(shù)內(nèi)的代碼環(huán)境,就是局部作用域。 因?yàn)楦瘮?shù)有關(guān)系,所以也稱為函數(shù)作用域。
例如:
for(let i=0;i<100;i++){ sum += i; }
二、變量的作用域
在JavaScript中,根據(jù)作用域的不同,變量可以分為兩種:
- 全局變量
- 局部變量
1、全局變量
在全局作用域下聲明的變量叫做全局變量(在函數(shù)外部定義的變量)。
全局變量在代碼的任何位置都可以使用
在全局作用域下 var 聲明的變量 是全局變量
特殊情況下,在函數(shù)內(nèi)不使用 var 聲明的變量也是全局變量(不建議使用)
2、局部變量
在局部作用域下聲明的變量叫做局部變量(在函數(shù)內(nèi)部定義的變量)
局部變量只能在該函數(shù)內(nèi)部使用
在函數(shù)內(nèi)部 var
聲明的變量是局部變量
函數(shù)的形參實(shí)際上就是局部變量
3、全局變量和局部變量的區(qū)別
- 全局變量:在任何一個(gè)地方都可以使用,只有在瀏覽器關(guān)閉時(shí)才會(huì)被銷毀,因此比較占內(nèi)存。
- 局部變量:只在函數(shù)內(nèi)部使用,當(dāng)其所在的代碼塊被執(zhí)行時(shí),會(huì)被初始化;當(dāng)代碼塊運(yùn)行結(jié)束后,就會(huì)被銷毀,因此更節(jié)省內(nèi)存空間。
三、作用域鏈
根據(jù)在內(nèi)部函數(shù)可以訪問外部函數(shù)變量的這種機(jī)制,用鏈?zhǔn)讲檎覜Q定哪些數(shù)據(jù)能被內(nèi)部函數(shù)訪問,就稱作作用域鏈
- 只要是代碼,就至少有一個(gè)作用域
- 寫在函數(shù)內(nèi)部的局部作用域
- 如果函數(shù)中還有函數(shù),那么在這個(gè)作用域中就又可以誕生一個(gè)作用域
例如:對(duì)下面的代碼進(jìn)行分析判斷結(jié)果是幾
function f1() { var num = 123; function f2() { console.log( num ); } f2(); } var num = 456; f1();
分析如下圖所示:
可知最終的結(jié)果為:123
同樣,也可以采取就近原則的方式來查找變量最終的值。
到此這篇關(guān)于JavaScript
作用域詳情介紹的文章就介紹到這了,更多相關(guān)JavaScript作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript知識(shí):構(gòu)造函數(shù)也是函數(shù)
構(gòu)造函數(shù)就是初始化一個(gè)實(shí)例對(duì)象,對(duì)象的prototype屬性是繼承一個(gè)實(shí)例對(duì)象。本文給大家分享javascript構(gòu)造函數(shù)詳解,對(duì)js構(gòu)造函數(shù)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2021-08-08Web?Animations?API實(shí)現(xiàn)一個(gè)精確計(jì)時(shí)的時(shí)鐘示例
這篇文章主要為大家介紹了Web?Animations?API實(shí)現(xiàn)一個(gè)精確計(jì)時(shí)的時(shí)鐘示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07競(jìng)態(tài)條件Race condition及如何避免的三種方案詳解
這篇文章主要為大家介紹了競(jìng)態(tài)條件Race condition及如何避免的三種方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10一篇文章教你學(xué)會(huì)js實(shí)現(xiàn)彈幕效果
彈幕效果隨著b站的越做越強(qiáng),出現(xiàn)了越來越多的仿照b站的視頻站點(diǎn)。然而這些視頻站仿照的最多的只有一點(diǎn)!那就是彈幕,現(xiàn)在也越來越多的人喜歡上了彈幕本文就教你如何制作2021-08-08微信小程序 利用css實(shí)現(xiàn)遮罩效果實(shí)例詳解
這篇文章主要介紹了微信小程序 利用css實(shí)現(xiàn)遮罩效果實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01JavaScript前端實(shí)現(xiàn)小說分頁功能示例
這篇文章主要為大家介紹了JavaScript前端實(shí)現(xiàn)小說分頁功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07判斷Spartacus?SSR的Transfer?State是否正常工作技巧
這篇文章主要為大家介紹了判斷Spartacus?SSR的Transfer?State是否正常工作技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10